JavaScript严格模式

什么是严格模式

在 ES5 的时候,JS 首次引入了严格模式的概念,它会以更严格的条件去检查你的代码错误,它可以全局使用,也可以局部使用(应用到函数内部)。

严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。

严格模式对正常的 JavaScript 语义做了一些更改:

  1. 消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为。
  2. 消除代码运行的一些不安全之处,保证代码运行的安全。
  3. 提高编译器效率,增加运行速度。

如何使用

情况一 :为脚本开启严格模式

非常简单,提供一个不赋值给任何变量的字符串即可。这个字符串为:

"use strict"

有的 script 脚本是严格模式,有的 script 脚本是正常模式,这样不利于文件合并,所以可以将整个脚本文件放在一个立即执行的匿名函数之中。这样独立创建一个作用域而不影响其他 script 脚本文件。

(function (){
  //在当前的这个自调用函数中有开启严格模式,当前函数之外还是普通模式
    "use strict";
       var num = 10;
    function fn() {}
})();

情况二:为函数开启严格模式

function demo(){
"use strict"
// do something…
}

严格模式下的区别

1.创建变量,在非严格模式下,可以直接声明一个全局变量,而不是用 var、let 或 const 关键字,并且还不报错。

示例:

a = 1;

在严格模式下,以上面方式声明变量,则不被允许,会在执行代码是抛出ReferenceError。并且在严格模式下,不允许在变量上调用 delete。

2.使用函数的 apply()或 call()方法时,在非严格模式下 null 或 undefined 值会被强制 转型为全局对象。在严格模式下,则始终以指定值作为函数 this 的值,无论指定的是什么值。例如:

// 访问属性 
// 非严格模式:访问全局属性 
// 严格模式:抛出错误,因为 this 值为 null let color = "red"; 
function displayColor() { alert(this.color); } 
displayColor.call(null);

3.非严格模式下在全局作用域函数中的this指向window对象
严格模式下,全局作用域函数中的thisundefined

function fn() {
 console.log(this); // 严格模式下全局作用域中函数中的 this 是 undefined
}
fn();

阅读剩余
THE END