今天看到一个关于自执行函数和异步调用的问题
for(var i = 0; i<5; i++){
setTimeOut(function(i){
console.log(i);
}(i),i * 1000);
}
//0,1,2,3,4 同时输出
解释:
首先了解setTimeOut。setTimeOut第一个参数只接受Function和String类型,而如果你传入的显示不是Function类型,解析器会把你传入的参数扔进eval()中执行。回到本题,因为传入的是立即执行函数,所以会把这个立即执行函数的运行结果(return值)当作代码扔到eval()中执行。
eval()
eval()函数会将传入的字符串当作JavaScript代码进行执行
eval(string)
- 参数 String
一个表示 JavaScript 表达式、语句或一系列语句的字符串。表达式可以包含变量与已存在对象的属性。 - 返回值
返回字符串中代码的返回值。如果返回值为空,则返回 [undefined
]