es5和es6对定义有了不同的写法
es5中用var来定义,es6中用let来进行定义
let定义的为块级作用域,var定义的是局部变量或全局变量
下面用一个js中经常碰到的一个问题来看作用域的问题,很多东西都在注释中我就不多bb了
/*es5作用域*/ const callbacks = []; for (var i = 0; i <= 2; i++) { callbacks[i] = function () { return i * 2 } /*这里的var定义的为全局变量,因此最终i=3,虽然callbacks[i]的i为1,2,3,但是‘return i * 2’的i为引用i变量而不是i变量的值值为3*/ } console.table([ callbacks[0](),//6,闭包中i已经变成3 callbacks[1](),//6, callbacks[2]()//6, ]); /*es6作用域(es6中let相当于es5中的var)*/ const callback = []; for (let j = 0; j <= 2; i++) { callback[j] = function () { return j * 2 } /*let声名的变量为块作用域,作用于当前的块每次循环都会把值保留下来供后面的闭包使用*/ } console.table([ callback[0](),//2 callback[1](),//4 callback[2]()//6 ]);