Discuss
/
JavaScript
/
详解
详解
Topic sourceresult 本质就是这个有三个元素的数组,不过这三个元素都是同一个函数:function() { return i * i;},且只与i 有关,这时i=4。
所以result[0]=result[1]=result[2]=function() { return 4 * 4;}=16
感谢感谢,1楼的大神是不是打快了,有个点理解不一样:
直到
var f1 = results[0];
,此时function f1() { return i * i;}
开始执行
应该是在var f1 = results[0];
,此时还没有开始执行函数,而是等到调用`f1()`时,function f1() { return i * i;}
才开始执行吧?不知道理解是不是正确;
- 1
辣椒炒肉贼好吃
来自某博文。很感谢
首先我们弄懂上面代码的运行流程:首先
var results = count();
之后,函数count
已经被调用了,所以一次执行函数内的各段代码:var arr = [];
,for (var i=1; i<=3; i++)
,这个for循环尤其值得注意。因为此时循环体执行了push方法,将一个个函数function () { return i * i;}
添加到数组内,但是这个函数并没有被调用,还只是一个变量,所以for循环依次执行,直到i = 4
。因为闭包,内部函数function () { return i * i;}
引用的i
就是外部变量,for循环中的i = 4
。所以,之后数组arr
内的函数的i
都是4。 调用函数
count
后,变量results
已经是数组arr
了。数组里面元素依次是function f1() { return i * i;} function f2() { return i * i;} function f3() { return i * i;}
。但是三个函数都没有被调用,直到var f1 = results[0];
,此时function f1() { return i * i;}
开始执行,如上段所写,此时的i = 4
,所以,返回值就是16了。后面两个调用也是类似情况