• "use strict"详解


    参考:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

    目的:

    • 消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;
    • 消除代码运行的一些不安全之处,保证代码运行的安全;
    • 提高编译器效率,增加运行速度;
    • 为未来新版本的JavaScript做好铺垫。

    行为:

    全局变量必须显示声明

    "use strict"
        v = 1  // 报错,v未声明
        for(i = 0;i<2;i++){   //报错,i未声明
    }

    禁止使用with语句

    因为with语句无法在编译时就确定,属性到底归属哪个对象。

    "use strict";
      var v = 1;
      with (o){ // 语法错误 
        v = 2;
      }

    创设eval作用域

     "use strict";
      var x = 2;
      console.info(eval("var x = 5; x")); // 5
      console.info(x); // 2    

    禁止this关键字指向全局对象

      function f(){
        return !this;
      } 
      // 返回false,因为"this"指向全局对象,"!this"就是false
      function f(){ 
        "use strict";
        return !this;
      } 
      // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
      function f(){
        "use strict";
        this.a = 1;
      };
      f();// 报错,this未定义

    禁止在函数内部遍历调用栈

      function f1(){
        "use strict";
        f1.caller; // 报错
        f1.arguments; // 报错
      }
      f1();

    禁止删除变量

    严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

      "use strict";
      var x;
      delete x; // 语法错误
      var o = Object.create(null, {'x': {
          value: 1,
          configurable: true
      }});
      delete o.x; // 删除成功

    对象不能有重名的属性 函数不能有重名的参数

      "use strict";
      var o = {
        p: 1,
        p: 2
      }; // 语法错误
    
      function f(a, a, b) { // 语法错误
        return ;
      }

    禁止八进制表示法

      "use strict";
      var n = 0100; // 语法错误

    不允许对arguments赋值 arguments不再追踪参数的变化 禁止使用arguments.callee(已被ES5抛弃)

      function f(a){
                "use strict"
                 arguments++;  // 语法错误
        }
        function f(a) {
        a = 2;
        return [a, arguments[0]];
      }
      f(1); // 正常模式为[2,2]
      function f(a) {
        "use strict";
        a = 2;
        return [a, arguments[0]];
      }
      f(1); // 严格模式为[2,1]    

     保留字

      function package(protected) { // 语法错误
    
        "use strict";
    
        var implements; // 语法错误
    
      }
  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/zgx123/p/7465781.html
Copyright © 2020-2023  润新知