javascript最新2020经典面试题
let和var
(a):let声明的变量只在let命令所在的代码块内有效
(b):let是在代码块内有效,var是在全局范围内有效:
(c):let不存在变量提升,var会变量提升:
for(vari=0;i<10;i++){ setTimeout(function(){ console.log(i); }) } //输出十个10 for(letj=0;j<10;j++){ setTimeout(function(){ console.log(j); }) } //输出0123456789
解析:
变量i是用var声明的,在全局范围内有效,所以全局中只有一个变量i,每次循环时,setTimeout定时器里面的i指的是全局变量i,而循环里的十个setTimeout是在循环结束后才执行,所以此时的i都是10。
变量j是用let声明的,当前的j只在本轮循环中有效,每次循环的j其实都是一个新的变量,所以setTimeout定时器里面的j其实是不同的变量,即最后输出12345。(若每次循环的变量j都是重新声明的,如何知道前一个循环的值?这是因为JavaScript引擎内部会记住前一个循环的值)。
以上就是javascript最新2020经典面试题的详细内容,更多关于javascript常见面试题请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。