什么是严格模式

  1. 严格模式是从 ES5 开始新增的一种方式,是采用具有限制性 JavaScript 变体的一种方式,从而使代码隐式地脱离 马虎模式/稀松模式/懒散模式 (sloppy) 模式;
  2. 设立 严格模式 的目的,主要有以下几个:
    1. 消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为;
    2. 消除代码运行的一些不安全之处,保证代码运行的安全;
    3. 提高编译器效率,增加运行速度;
    4. 为未来新版本的 Javascript 做好铺垫;

开启严格模式

  1. 针对整个脚本文件:将 “use strict” 放在脚本文件的第一行,则整个脚本都将以 严格模式 运行;

  2. 针对单个函数:将 “use strict” 放在函数体的第一行,则整个函数以 严格模式 运行;

  3. 脚本文件的变通写法:因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中;

严格模式的具体情况

  1. 没有使用 var 声明的变量不能使用:在普通模式下,可以使用一个未声明的变量,此时该变量会成为一个全局变量,但是这种使用方式在严格模式下会报错;

    "use strict"
    a=10; // ReferenceError: a is not defined
    console.log(a)
    
    function sum(){
      var a=10;
      console.log(a)
    }
    sum()
    
  2. 删除变量和不存在的属性会报错:在普通模式下,删除变量或者不允许删除的属性虽然也会失败,但是是 静默失败 ,也就是说虽然失败了,但是不会给出任何提示;这样其实会产生很多隐藏问题,也给程序员的调错带来了难度;在严格模式下则会报错;

    "use strict"
    var i = 10;
    delete i; // SyntaxError: Delete of an unqualified identifier in strict mode.
    console.log(i); // 10
    
  3. 函数中相同的形参名会报错:在普通模式下,函数中两个形参名相同也不会报错,只不过后面的形参所接收到的值会覆盖前面的同名形参;但是在严格模式下,相同的形参名会报错;

    "use strict"
    // SyntaxError: Duplicate parameter name not allowed in this context
    function a(b, b){
        console.log(b);
    }
    a(1, 2)   
    
  4. 对象不能有重名的属性:正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值,严格模式下,这属于语法错误;

    "use strict";
    var o = {
      p: 1,
      p: 2
    }; // 语法错误
    
  5. 禁止八进制表示法:正常模式下,整数的第一位如果是 0 ,表示这是八进制数,比如 010 等于十进制的 8;严格模式禁止这种表示法,整数第一位为 0 将报错;

    "use strict"
    var i = 010; // SyntaxError: Octal literals are not allowed in strict mode.
    console.log(i);
    
  6. 函数内部 this 值为 undefined:在普通模式下,函数中的 this 在以函数的形式被调用时,指向全局对象;而在严格模式中,得到的值为 undefined

    "use strict"
    function a(){
        console.log(this); // undefined
    }
    a();
    
  7. 创设 eval 作用域

    1. 正常模式下,Javascript 语言有两种变量作用域(scope):全局作用域和函数作用域;
    2. 严格模式创设了第三种作用域:eval 作用域;
      • 正常模式下,eval 语句的作用域,取决于它处于全局作用域,还是处于函数作用域;
      • 严格模式下,eval 语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于 eval 内部;
    "use strict";
    var x = 2;
    console.info(eval("var x = 5; x")); // 5
    console.info(x); // 2
    
  8. 保留字:为了向将来 Javascript 的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield;使用这些词作为变量名将会报错;

    "use strict";
    var public = "hello world" // SyntaxError: Unexpected strict mode reserved word
    console.log(public);
    
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 什么是严格模式
  2. 2. 开启严格模式
  3. 3. 严格模式的具体情况