前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

这一次就把闭包和作用域彻底整明白

每次面试,做笔试题,这都是糊里糊涂,答不明白,而且在面试前,人家特意复习了好吗?!

人家一问,我的脑子就不见了。

首先再复习一下作用域,就提两个知识点:

1:函数内部可以直接读取全局变量;

2:在函数的外部无法获取函数内的局部变量。

那么如何才能从外部获取局部变量?那就是在函数内部再定义一个函数。类似于这样:

1 function f1{
2  var n=999;
3  function f2{
4   alert(n); // 999
5  }
6 }

函数 f2 包在函数 f1 里面,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

1 function f1{
2  var n=999;
3  function f2{
4     alert(n); 
5  }
6  return f2;
7 }
8 var result=f1;
9 result; // 999

在上面这个函数里 f2 就是一个闭包。

这样感觉清晰多了。去做几道练习题!

感谢阮一峰的网络日志,原文链接:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言