严格模式如何开启严格模式?在文件或者函数开头使用 “use strict”严格模式常见的限制"use strict""use strict"// 1.禁止意外创建全局变量// 在全局中不使用关键字直接定义变量message = "hello"message is not defined// 2. 不允许函数有相同的参数名称function foo(x, y, x) {}// Duplicate parameter name not allowed in this context// 3.使静默错误(不报错但也没有任何效果)的赋值操作抛出异常true.name = "abc"NaN = 123var obj = {}Object.defineProperty(obj, "name", { configurable: false, writable: false, // 不可写 value: "hillyee"})obj.name = "jenny"// 试图删除不可删除的属性,报错delete obj.name// Cannot delete property 'name' of #<Object>// 4.不允许使用原先的八进制格式var num = 0o123 // 八进制var num2 = 0x123 // 十六进制var num3 = 0b100 // 二进制严格模式下的this"use strict"// 在严格模式下,独立函数调用this默认绑定不是window,而是undefinedfunction foo() { console.log(this); // undefined}foo()var obj = { name: "hill", foo: foo}var bar = obj.foobar()// setTimeout的this// 内部 fn.apply(this=window)setTimeout(function() { console.log(this); // window}, 1000)