码迷,mamicode.com
首页 > 编程语言 > 详细

javascripts闭包的理解

时间:2017-04-20 10:41:52      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:param   params   erro   语法   []   调用   javascrip   err   count()   

理解闭包的第一步是理解函数的立即执行。看下面的例子:

 1 function count() {
 2     var arr = [];
 3     for (var i=1; i<=3; i++) {
 4         arr.push((function (n) {
 5             return function () {
 6                 return n * n;
 7             }
 8         })(i));
 9     }
10     return arr;
11 }
12 
13 var results = count();
14 var f1 = results[0];
15 var f2 = results[1];
16 var f3 = results[2];
17 
18 f1(); // 1
19 f2(); // 4
20 f3(); // 9

  注意第13行并没有去调用内部函数,因为count( )返回的只是arr,这个对象是一个函数数组,里面有三个函数,只有当调用这个内部中的函数对象中的函数时才会执行n*n的操作。

注意第8行这里用了一个“创建一个匿名函数并立刻执行”的语法:

(function (x) {
    return x * x;
})(3); // 9

理论上讲,创建一个匿名函数并立刻执行可以这么写:

function (x) { return x * x } (3);

但是由于JavaScript语法解析的问题,会报SyntaxError错误,因此需要用括号把整个函数定义括起来:

(function (x) { return x * x }) (3);

通常,一个立即执行的匿名函数可以把函数体拆开,一般这么写:

(function (x) {
    return x * x;
})(3);

 

javascripts闭包的理解

标签:param   params   erro   语法   []   调用   javascrip   err   count()   

原文地址:http://www.cnblogs.com/stephen666/p/6736917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!