严格模式的声明方式 1. 在函数体的开头声明严格模式: ``` function func() { \"use strict\"; // 代码逻辑 } ``` 2. 在JS的全局作用域下声明严格模式: ``` \"use strict\"; // 代码逻辑 ``` 3. 在模块(module)中声明严格模式: ``` // myModule.js \"use strict\"; function myModule() { // 代码逻辑 } ```
使用严格模式所带来的影响

1. 变量必须先声明后使用: 在严格模式下,如果试图使用未声明的变量,JavaScript会抛出一个ReferenceError错误,如下所示: ``` function myFunc(){ \"use strict\" name = \"David\"; console.log(name); } myFunc(); // ReferenceError: name is not defined ```
2. 使用eval变得更安全且有限制: 在严格模式下,eval()内的变量无法污染外部作用域;而在非严格模式下,变量eval()可以从任何地方引入并重写当前作用域或全局作用域的任何变量/函数,这样使用eval()将很危险。
3. 禁止删除变量: 在严格模式下,delete运算符不允许删除变量,只允许删除对象属性。 ``` \"use strict\"; const Employee = { name: \"John\", age: \"28\" }; delete Employee.name; // 成功(非严格模式下也可成功) delete Employee; // 语法错误(非严格模式下可成功删除对象) ```
严格模式的好处

1. 运行更安全: 使用严格模式可以使代码更加安全。对于开发者来说,它有助于捕获一些错误并进行更详尽的调试。
2. 代码行为更加合理: 使用严格模式可以消除某些不必要的Javascript行为和保留为(非严格模式下)滥用的变量和方法。
如何适应严格模式

1. 始终使用变量,函数和对象的声明: ``` \"use strict\"; // 建议做法: const age = 18; function myFunc(){ console.log(\"function was called\"); } const myObj = { name: \"David\" }; // 错误做法: age = 18; myFunc = function(){ console.log(\"function was called\"); }; myObj = { name: \"Peter\" }; ```
2. 在同一文件中应该始终使用相同的最佳实践: 当在同一文件中混合使用严格和“松散”代码时,可能会发生奇怪的错误,捕获这些错误并进行调试会变得困难。
总结: 使用严格模式可以使您的代码更安全且在许多方面改善代码质量。始终尽可能使用严格模式并按建议编写您的代码,以便更容易维护和调试。