当Javascript声明变量时,虽然使用var关键字声明和没有关键字声明,但是在
运行许多次时有很多问题,但是这两种方式之间有差异。
var = 1;
变量在当前域中声明。如果在
方法中声明,它是一个局部变量(局部变量);如果在全局域中声明它,它是一个全局变量。
和数字= 1;
事实上,这是一个
属性赋值
操作。首先,它将尝试在当前范围链中声明,如在方法中声明,当前范围链表示全局范围和局部范围等。如果在当前的任何范围链中
发现了数值,它将
执行数字属性分配。如果民没有被找到,它将创造num属性和指定值的全局对象,即当前
作用域链的顶层对象,如窗口对象,..
小心 uff01instead声明一个全局变量,它会
创建一个全局对象的一个属性。
即便如此,它可能让你了解一个变量声明和对象属性的创作之间的
区别是困难的。事实上,声明变量,Javascript创建每个属性与每个Javascript有一定的符号为只读的(只读)不可数(dontenum)不能
删除(dontdelete)等。
因为变量声明有自己的属性不能被删除,所以它被与var = 1和数字= 1进行比较。前者是变量声明,其属性不能被删除,因此不能删除。后者是全局变量的一个属性,可以从全局变量中删除。
具体地看下面的代码:
复制代码代码如下所示:
/ / num1作为全局变量num2是窗口的属性
VaR num1 = 1;
num2 = 2;
无法删除num1 / /删除;
删除 / /删除num2;
模型
函数(){
VaR num1 = 1; / /局部变量
num2 = 2; / /窗口属性
匿名函数
(函数(){())
var = 1;
本地变量
num1 = 2; / /继承范围(
关闭)
小
键盘数字3 = 3; / /窗口属性
}()
}
诗有着严格的
模式(严格模式)在ecmascript5标准。在严格的模式,一个声明的标识符的分配将
参考误差,从而防止意外的全局变量性质的创作,一些
浏览器的新版本现在
支持。