zoukankan      html  css  js  c++  java
  • ES5 的 严格模式

    除了正常运行模式,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,让你变成一个更好的程序员。
     
     
    对于程序来说:执行效率高,运行速度快
    对于写代码的人来说:代码书写规范,避免异常错误
     
     
     
    所以使用严格模式还是很必要的 
    当严格成为一种习惯
  • 相关阅读:
    私有继承基类函数如何被访问
    Song Form
    转载:Fork函数详解
    转载:bss段不占据磁盘空间的理解
    转载:大内高手—全局内存
    转载:内联函数 —— C 中关键字 inline 用法解析
    安装ubuntu16.04全过程,脱坑,修复the system is running in low-graphics mode
    C语言运算符优先级( * 与 ++)
    movsb movsw movsd 指令
    Linux文件属性
  • 原文地址:https://www.cnblogs.com/vicky77/p/7382086.html
Copyright © 2011-2022 走看看