在JavaScript中定义变量 - VAR,Flight或const
#javascript #网络开发人员 #es6

有更多方法可以在JavaScript中定义变量。旧的方法是使用关键字var。但是,ES6标准JavaScript带来了两个新的关键字来定义变量-letconst。在本文中,您将阅读这三种方法之间的最基本差异。

简短说明:在整个文本中,即使在我接近使用const定义的值时,在susthini中,这意味着它在konstant悬架中定义了值。有关本文第四章中两者之间的区别的更多信息。

本文中流动的所有力量是什么?

  • var和飞往范围的飞行之间的区别
  • 瓦斯特(Var)和飞行的差异
  • re -declaring的差异
  • razlikaizmeäu让我const

varlet之间的差异(范围)(范围)

ÅTaJe oppseg?

范围是可见一个声明值的环境。 JavaScript中有三个频段:全局,功能和块。

在整个程序中都可以使用全球范围内声明的所有值。不管在声明此值时使用哪个密钥在整个程序中都可以看到。

example code of JavaScript global scope

因此,代码中的任何地方都可以访问name变量6,因为它具有全局范围。 logNameconsole.log函数可以访问name变量6。

一般来说,应该避免声明全局变量,因为这为出现各种重叠和 /或取消其他脚本和库的范围打开了空间。< / p>

在这种情况下,重要的是要强调,没有关键字的每个变量自动成为全局变量。

automatic global variable js example

VAR和飞行之间的差异是当它们不是全局变量时出现的。用var声明的变量具有声明其声明的函数的范围。

JavaScript function scope example code

这是什么?当您调用koud7的函数时,它会看到一个可变的ime,因为ime变量的范围是此函数。但是,当您尝试在console.log(ime)中处理该变量时,您已经处于全局范围,并且没有访问(看不到)ime变量,因此会遇到错误。

let声明的变量不同,代码代码的范围。 JavaScript中的代码块简单地调解了Vitic Brackets {}中的所有内容。这可以是if-else语句,switch语句,任何循环...

JavaScript block scope example

这是什么?我有一个if语句(块代码),其中ime变量的声明。在同一代码代码14中,请参见此变量,因为该变量的范围是代码块。但是,您在全局范围中不在该块中,无法访问ime变量。

使用var声明的

变量不会驱逐错误。

JavaScript example block scope code with var

ime变量在这种情况下将具有全局范围,并且可以(可见)到另一个console.log(ime)语句。


varlet之间的差异

varlet密钥之间的另一种差异是在所谓的提升(升降机)期间的行为。这是一种机制,在其中,函数和变量的声明似乎移至其范围的顶部(提升)。正是由于这种机制,您可以在声明之前访问变量或功能。

example code for JavaScript var hoisging

因此,logName函数可以访问ime变量,这就是为什么变量ime 看起来像的原因 在范围的顶部(范围 - global),但您应该咨询她的价值34的价值。

这是varlet在此处执行的差异的地方。提升的原则只能与var声明的变量合作。如果您尝试利用let来声明变量,则会收到一个错误,因为用let声明的变量不会提高。

example JavaScript code hoisting with let variable

“看似”一词是有意标记的,因为这正是解释的到来。当代码执行时没有任何代码行不会均匀移动时,没有任何抬高。举起只是“显然”。

阅读时,什么JavaScript引擎可以工作?

当某些引擎(负责执行JavaScript代码的组件)时,JavaScript代码由两个步骤执行:创建阶段(阶段)阶段(执行阶段)。

  1. 在“引擎阶段”中,每个变量的声明,分配给她在内存中的空间和undefined的初始值。然后声明变量。这是声明变量。

  2. 在执行阶段,将变量给出代码中分配给其的值。例如。当您编写var ime = 'Slaven'时,这是初始化变量。

提升机制只能提交变量声明,而不是初始化。这是由于此变量在var中声明,当您尝试使用它们之前,它们在初始化它们之前尝试使用它们的值。

let声明的变量类型,您在初始化之前无法访问(第二步),如果在初始化之前尝试使用它,您将找到错误代码45。在Susthin'Engine'告诉您,“我看到一个变量,已声明,但它不是初始化的,因此您无法访问它。

注意:在这两个步骤中,用letconst声明了严格的说话变量,结束了所谓的“时间死区”(时间死区),解释这将需要更深入的创建和执行阶段(执行) ),我认为这应该是另一个文本的话题。


重新支配的差异

另外一个差异是可以用相同名称重新指定的var声明的变量。

example code of JavaScript redeclaration with var

如果使用var,这是有效的JavaScript语法。第二个声明将取消第一个,因为ime变量将带有“ John”的值。

有必要有多么潜在的问题。不想发现自己在一段时间后尝试再次声明变量的情况,因为您可能已经忘记了自己已经有一个具有相同名称的变量。

此上下文中的变化来自let(以及const)。用let声明的变量无法重新宣布,您会收到一个错误。

example JavaScript code for redeclaration with let

这将在涉及倾斜变量时同时驱逐let错误。


letconst之间的差异

letconst声明的变量在我到目前为止与之交谈的所有情况(范围,举​​重,重新删除)。 这两个关键之间的区别在于,用let声明的变量可以在其他地方分配新值,直到用const声明变量,这是他们介绍的目的。

example JavaScript code for value change with let

这不应与我在上一章中所说的那样混合在一起,即let变量无法重新宣布。 koud12变量不再被声明,而不是仅授予另一个值。

mečiutijet,关键字const不允许这样做。

example JavaScript code for redeclaration with const

这是不允许的,您将同时遇到一个错误。由于不允许指定的罪分配为常数。

求助于const变量的牧场的一件事是,当他们携带参考数据类型的价值(例如对象或字符串)时,它们的行为方式。尽管不允许在此处重新分配值,但可以在该值中更改元素本身。

example of JavaScript code for const object property change

我们这里有一个korisnik对象,该对象具有两个属性。之后,在该对象中更改了godine属性。

在JavaScript和const变量中允许使用此功能。这称为变量的突变。因此,允许它更改对象内的各个属性,但是不允许将值重新分配给整个变量。

有一些方法可以冻结对象中的某些属性,但这是一个值得在单独文本中检查的话题。


ZakljuäAk

  • 避免使用全局变量。这打开了太多空间,无法重叠来自不同脚本或库的名称变量。

  • 通常,当我们拥有let和kooude2时,通常应该避免现在声明变量的var关键字。带有var肮脏全局(窗口)设施的变量,这是必需的。

  • 如果您可以预期该变量不会接收其他值,请使用const来声明变量。如果您有理由认为它曾经使用此变量获取另一个值,则可以使用let关键字。