[JavaScript]JS中的变量声明与有效域
1.变量声明
var a = 1; //使用var声明变量 b = 1; //不使用var
第一种情况,在当前域中声明一个名为a的变量,如果实在方法内则为局部变量,若在最外层声明则a为全局变量。
第二种情况,实际上是赋值操作,执行代码时会先在当前域寻找是否存在名为b的变量,若没有则到外面一层寻找,直到跳到最外面的那层,如果在任何域中还是没有。就会在最外层的对象创建一个名为b的属性并赋值为1。所以b实际上是全局对象(在客户端的JavaScript中,在浏览器窗口中的所有JavaScript代码中,Window对象充当了全局对象。)的一个属性,而算不上变量。
并且JS中变量是不可以被删除的,但b作为全局变量的一个属性是 可以被删除的。
事实上,Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性----如只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。
由于变量声明自带不可删除属性,比较var num = 1 跟 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。