深入理解JavaScript系列(12)变量
变量与执行上下文有关,缩写为VO(variable object),包括三种情况:
- 变量声明(var);
- 函数声明;
- 形参
arguments
arguments是活动对象的一个属性,并有以下属性:
callee指向当前函数的引用 caller是属于 函数自身的属性 function foo(){ console.log(argemnts.callee); console.log(foo.caller); } function ff(){ foo(); } foo() // 这个是window下调用 callee->function foo(); caller-> null ff() // ff 下调用:callee->function foo() caller->function ff();
- length 实参个数。(函数名.length是形参个数,比如foo.length)
- properties-indexes属性值是函数的参数值。其实就是直接arguments[index]。
进入上下文后,变量声明在顺序在函数声明和形参之后,并且不会干扰已经存在的同名函数声明与形参。
if (true) {
var a = 1;
} else {
var b = 2;
}
//b位undefined,不是没有声明而是声明了,但是值为undefined
变量必须通过var声明,否则则为错:
console.log(a); //undefined
console.log(b);//直接报错,因为b没有声明,也不会提前存在。b可以使用delete进行删除(即有DontDelete属性,而var声明的函数没有,不可以删除)。但是eval的上下文例外。
var a = 10;
b = 20;
eval('var c = 10');
console.log(delete a); //false
console.log(delete b); //true
console.log(delete c); //true;
console.log(a) //10
console.log(b) //undefined
console.log(c) //undefined
Written on June 21, 2015