如下面这段代码,为什么执行后的结果是undefined。我不理解
function fetch() {
for (var i = 0; i < 5; i++) {
setTimeout(function (i) {
console.log(i);
})
}
}
fetch()
如下面这段代码,为什么执行后的结果是undefined。我不理解
function fetch() {
for (var i = 0; i < 5; i++) {
setTimeout(function (i) {
console.log(i);
})
}
}
fetch()function fetch() {
for (var i = 0; i < 5; i++) {
setTimeout(function (i) {
console.log(i);
})
}
}
fetch()等同于:
function fetch() {
var myFun = function (a) {
console.log(a);
}
for (var i = 0; i < 5; i++) {
setTimeout(myFun) //没传参
}
}
fetch()function fetch() {
for (var i = 0; i < 5; i++) {
setTimeout(function (a) { // 你原来匿名函数形参是i,其实这个i和外围的i没有任何关系,这里用a,区分更明确
console.log(a);
},0,i) // 这里在setTimeOut中显式调用匿名函数,并把i当前值传递给了。你原来就没有传递值,所以匿名函数执行的i就是undefined
}
}
fetch()需要注意,setTimeOut支持向调用函数传参是需要浏览器支持的,比如IE9及更早的IE都不支持。
欢迎进入坑多的世界。
试试下面的代码:
function fetch() {
for (var i = 0; i < 5; i++) {
setTimeout((function (i) {
console.log(i);
})(i))
}
}11 回答1.3k 阅读
1 回答862 阅读✓ 已解决
1 回答1.1k 阅读
1 回答797 阅读✓ 已解决
2 回答780 阅读
2 回答622 阅读
2 回答610 阅读
这里的i没有任何地方传入,所以就是undefined
https://developer.mozilla.org...
你希望传入for循环的i的话可以这么用: