<script type="text/javascript">
var fnArr = [];
for (var i = 0; i < 10; i ++) {
var fn=function(){
return fn.index;
}
fn.index=i;
fnArr[i]=fn;
}
console.log( fnArr[3]()); //
</script>
为什么第一段代码弹出的是9;
<script type="text/javascript">
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function star(){
return star.index;
};
fnArr[i].index=i;
}
console.log( fnArr[3]() ); //
</script>
为什么这段代码弹出的是3;两者区别在哪里。。。
由于变量提升,第一段代码相当于
也就是相当于对fn这个变量重复赋值9次,而且每次都覆盖,所以只保留最后一次9的状态,想达到你要的效果可以用let
请在较新版本的chrome下执行