第 31 题:改造下面的代码,使之输出 0 - 9,写出你能想到的所有解法
for (var i = 0; i< 10; i++){ setTimeout((i) => { console.log(i); }, 1000,i) }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
for (var i = 0; i< 10; i++){ setTimeout((i) => { console.log(i); }, 1000,i) }
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
除了 let 这个可能是改动最少的
闭包解法
利用try/catch的块级作用域也能实现目的:
解决办法汇总
方法一
原理:
setTimeout
函数的第三个参数,会作为回调函数的第一个参数传入bind
函数部分执行的特性代码 1:
代码 2:
代码 3:
方法二
原理:
let
变量的特性 — 在每一次for
循环的过程中,let
声明的变量会在当前的块级作用域里面(for
循环的 body 体,也即两个花括号之间的内容区域)创建一个文法环境(Lexical Environment),该环境里面包括了当前for
循环过程中的i
,具体链接代码 1:
等价于
方法三
原理:
代码 1:
代码 2:
方法四
原理:
console.log(i)
放到一个函数里面,因为setTimeout
函数的第一个参数只接受函数以及字符串,如果是js
语句的话,js
引擎应该会自动在该语句外面包裹一层函数代码 1:
代码 2:
代码 3:
代码 4:
代码 5:
代码 6:
方法五
原理:
代码 1:
代码 2:
代码 3:
正常写法:
砸场子写法: