在编程语言中,作用域控制着变量与参数的可见性及生命周期,它能减少名称冲突,而且提供了自动内存管理 –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