专栏名称: JavaScript
面向JavaScript爱好人员提供:前端最新资讯、原创内容、JavaScript、HTML5、Ajax、jQuery、Node.js等一系列教程和经验分享。
目录
相关文章推荐
51好读  ›  专栏  ›  JavaScript

图解Javascript上下文与作用域

JavaScript  · 公众号  · Javascript  · 2017-03-23 10:53

正文

请到「今天看啥」查看全文


var x = 'global';  

function a(){  

 var x = "a's x";

 function b(){

   var y = "b's y";

   console.log(x);

 };

 b();

}

function c(){  

 var x = "c's x";

 function d(){

   console.log(y);

 };

 d();

}

a();  // -> "a's x"  

c();  // -> ReferenceError: y is not defined  

x     // -> "global"  

y     // -> ReferenceError: y is not defined  

Closure

如果理解了上文中提到的上下文与作用域链的机制,再来看闭包的概念就很清楚了。每个function在调用时会创建新的上下文及作用域链,而作用域链就是将外层(上层)上下文所绑定的变量对象逐一串连起来,使当前function可以获取外层上下文的变量、数据等。如果我们在function中定义新的function,同时将内层function作为值返回,那么内层function所包含的作用域链将会一起返回,即使内层function在其他上下文中执行,其内部的作用域链仍然保持着原有的数据,而当前的上下文可能无法获取原先外层function中的数据,使得function内部的作用域链被保护起来,从而形成“闭包”。看下面的例子:

var x = 100;  

var inc = function(){  

 







请到「今天看啥」查看全文