扫码关注官方订阅号
如下代码:
for(var i = 0,l = 5;i
按理说 500毫秒以后,函数只是被return了,但是实际是console被执行了,请问是为什么?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
因为 setTimeout 就是在指定延时之后执行第一个参数,也就是传入的函数。
setTimeout
你以为 setTimeout 执行的是:
(function(j){ return function() { console.log(j) } })(i)
但其实这一串是一个 IIFE,当解释器读到这些代码的时候就已经把它执行了,然后返回了:
function() { console.log(j) }
所以,500ms 过后,setTimeout 实际执行的正是被返回之后的这个函数体。
500ms
函数是只是被return了,然后作为第一个参数传给了setTimeout,这不就是setTimeout的用法么?
return
大家都说到点子上了,我给个正确答案吧。
for(var i=0, l=5; i<l; i++) { (function(number){ setTimeout(function(){return function(){console.log(number)}}, 500); }(i)); }
setTimeout(*func,delay); setTimeout的第一个参数是一个函数指针; 你的代码中,外层匿名函数立即执行后返回的是内层匿名函数的指针,因此内层函数被执行。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为
setTimeout就是在指定延时之后执行第一个参数,也就是传入的函数。你以为
setTimeout执行的是:但其实这一串是一个 IIFE,当解释器读到这些代码的时候就已经把它执行了,然后返回了:
所以,
500ms过后,setTimeout实际执行的正是被返回之后的这个函数体。函数是只是被
return了,然后作为第一个参数传给了setTimeout,这不就是setTimeout的用法么?大家都说到点子上了,我给个正确答案吧。
setTimeout(*func,delay);
setTimeout的第一个参数是一个函数指针;
你的代码中,外层匿名函数立即执行后返回的是内层匿名函数的指针,因此内层函数被执行。