在编程语言中,作用域控制着变量与参数的可见性及生命周期,它能减少名称冲突,而且提供了自动内存管理 –javascript 语言精粹
js
的变量作用域是基于其特有的作用域链的。 window
对象的属性 //全局作用域
var a = 10;
//没有块级作用域
if(fasle){
var b =2;
}
//函数作用域
functionf(){
var a = 1;
console.log(a);
}
functionf(){
var x =100;
functiong(){
console.log(x);
}
g();
}
f();
g
访问不到变量时,它会通过内部的 [[scope]]
对象查找作用域链上的执行上下文,当找到就终止,找不到会继续,直到 window
对象上也没有的时候,会报错 new Function
创建的函数,其作用域指向全局作用域 functionf(){
var x = 100;
// g.[[scope]] == window
var g = new Function("", "alert(x)");
g();
}
f();
//报错 x is not defined