<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;两者区别在哪里。。。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
由于变量提升,第一段代码相当于
也就是相当于对fn这个变量重复赋值9次,而且每次都覆盖,所以只保留最后一次9的状态,想达到你要的效果可以用let
请在较新版本的chrome下执行
很明显: 在第一段:
然后第二段:
最终两者的赋值作用域不同,导致结果的差异
最近这两天在看Javascript;
楼上解答是对的;
题主的问题,可以分为三个概念(权威指南中的名词)的问题:
声明提前,函数定义,函数声明
var 定义的变量,变量声明会提到全局/局部顶部;但,赋值在var语句的地方执行,顶部获取变量值为undefined;