-
let 造成的暂时性死区(let 和块级作用域造成)
只要块级作用域内存在 let 命令,它所声明的变量就"绑定"(binding)这个区域,不再受外部的影响
var tmp = 123; if (true) { tmp = "abc"; // ReferenceError let tmp; }
-
for 循环中,var 和 let 表现不一样
用 var 声明的变量 全局的存储单元中只有一个
var a = []; for (var i = 0; i < 10; i++) { a[i] = function() { console.log(i); }; } a[6](); //10
-
函数表达式和函数声明语句的区别
// 函数声明语句 { let a = "secret"; function f() { return a; } } // 函数表达式 { let a = "secret"; let f = function() { return a; }; }
-
this 的指向性问题
全局环境中,this 会返回顶层对象。但是,Node 模块和 ES6 模块中,this 返回的是当前模块。
函数里面的 this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this 会指向顶层对象。但是,严格模式下,这时 this 会返回 undefined。
不管是严格模式,还是普通模式,new Function(‘return this’)(),总是会返回全局对象。但是,如果浏览器用了 CSP(Content Security Policy,内容安全策略),那么 eval、new Function 这些方法都可能无法使用。 -
数组遍历问题
从第一个非0位开始遍历let arr = [1, 2, 3]; arr[-2] = -2; arr["a"] = "a"; arr[12] = 12; console.log(arr); console.log(arr.length);
12] = 12;
console.log(arr);
console.log(arr.length);