您的位置:首页 > 其它

一个小函数引起的思考

2017-07-18 22:24 218 查看
var a = [];
for(var i = 0;i<10;i++){
a[i] = function(){
console.log(i)
}
a[0]()//0,1,2,3,4,5,6,7,8,9;console.log(a[i])
}
a[0]()//10

console.log(a[i])你会发现,打印出来的全部是function(){console.log(i)},也就是说在函数执行前,每个函数的i并没有解析

但是当在外面执行的时候,其实函数执行的时候i已经变成了10,当函数console.log(i)的时候i是10;那么你也许会问明明循环中已经定义好了a[6]= function(){console.log(6)}嘛,其实不是这样的,当在函数执行之前是不会读取函数体中的变量的,也就是说,循环了那么多次,定义了那么多的函数,函数体中的变量一直是i,只有在调用的时候才会寻找i的值

当在里面执行的时候,i是随着循环走的,每循环一次i就变化一次,所以在里面执行的时候函数中的i就是当前循环的i的值,这也就可以解释为什么在函数体内,a[0]()可以有那么多的值,因为还是上面的道理,当一次循环执行到a[0]()的时候,这个时候就开始为函数寻找函数里面的值到底是谁,结果自然而然就是当前循环的i的值嘛,当再一次接着循环的时候还是一样的道理.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: