学习ES6(https://www.runoob.com/w3cnote/es6-tutorial.html)针对教程中,一些不明白的地方做一个记录
- 使用for循环时:
这里涉及到javascript单线程执行的问题:javascript在浏览器中是单线程执行的,必须在完成当前任务后才执行队列中的下一个任务,由于var在全局有效,setTimeout 定时器里面的 i 指的是全局变量 i ,而循环里的十个 setTimeout 是在循环结束后才执行,所以此时的 i 都是 10,而用let声明,则只在本轮循环有效。for (var i = 0; i < 10; i++) { setTimeout(function(){ console.log(i); }) } // 输出十个 10 for (let j = 0; j < 10; j++) { setTimeout(function(){ console.log(j); }) } // 输出 0123456789
2.变量提升参考(参考):
let没有变量提升,var会变量提升console.log(a); //ReferenceError: a is not defined let a = "apple"; console.log(b); //undefined var b = "banana";