除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
<script> "use strict" console.log("已经进入严格模式"); </script>
很多人并不在意严格模式的使用
但其实经常使用严格模式会让你的代码更加规范
就算不适用严格模式也要避免这些问题
1.全局变量声明时 必须加var
//伪全局变量不允许被使用
<script> "use strict" a = 10;//报错 因为 a没有被var 声明 //Uncaught ReferenceError: v is not defined; 引用错误: v 没有被声明
</script>
2.this 无法指向全局对象;
<script> "use strict" // console.log("已经进入严格模式"); function a(){ this.b = 10; //报错 , 因为this指向了window对象; //Uncaught TypeError: Cannot set property 'b' of undefined; 类型错误 : 不能给undefined设置属性b; } a(); </script>
3.函数内重名属性;
<script> "use strict"; function a(b,b,c){ //报错; // Uncaught SyntaxError: Duplicate parameter name not allowed in this context ;语法错误:在此上下文中不允许重复的参数名称 } </script>
4.arguments对象;
4.1arguments对象不允许被动态改变;
<script> function fn1(a) { a = 2; return [a, arguments[0]]; } console.log(fn1(1)); // 正常模式为[2,2] function fn2(a) { "use strict"; a = 2; return [a, arguments[0]]; } console.log(fn2(1)); // 正常模式为[2,2] </script>
4.2arguments对象不允许被自调用;
<script> "use strict"; var f = function() { return arguments.callee; }; f(); // 报错 //Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them //类型错误:“caller ”,“arguments ”,“callee ”,不能在严格模式中使用; </script>
5.新增保留字; implements, interface, let, package, private, protected, public, static, yield。
<script> "use strict"; function package(protected) { // 语法错误 var implements; // 语法错误 } package(); </script>
严格模式的存在必定是有他存在的意义
-消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它。
同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。
对于程序来说:执行效率高,运行速度快
对于写代码的人来说:代码书写规范,避免异常错误
所以使用严格模式还是很必要的
当严格成为一种习惯