非严格模式下,a = 1可以创建一个全局变量。
严格模式下,变量都必须先用var命令显示声明,然后再使用。 严格模式不允许意外创建的全局变量(示例),否则会报错(Uncaught ReferenceError: v is not defined )。
"use strict"; v = 1; // 报错,v未声明 for(i = 0; i < 2; i++) { // 报错,i未声明 ReferenceError }
而且,严格模式不能对变量调用 delete 操作符(示例),会导致错误(Uncaught SyntaxError: Delete of an unqualified identifier in strict mode. )。
非严格模式允许这样操作,但返回false 。
别用这些词做 变量名 或 参数名 implements, interface, let, package, private, protected, public, static, yield。
这些都是保留字,将来ECMAScript 版本中可能会用到他们。
严格模式下作为其保留关键字,使用这些标识符作为变量名会导致语法错误。
对象字面量同一个属性重复赋值(Uncaught SyntaxError: Unexpected identifier),非严格模式会取最后一个(示例)
"use strict" var person = { name : "Tom" name : "Cat" }