JavaScript严格模式
什么是严格模式
在 ES5 的时候,JS 首次引入了严格模式的概念,它会以更严格的条件去检查你的代码错误,它可以全局使用,也可以局部使用(应用到函数内部)。
严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。
严格模式对正常的 JavaScript 语义做了一些更改:
- 消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为。
- 消除代码运行的一些不安全之处,保证代码运行的安全。
- 提高编译器效率,增加运行速度。
如何使用
情况一 :为脚本开启严格模式
非常简单,提供一个不赋值给任何变量的字符串即可。这个字符串为:
"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
对象
严格模式下,全局作用域函数中的this
是undefined
function fn() {
console.log(this); // 严格模式下全局作用域中函数中的 this 是 undefined
}
fn();
阅读剩余
版权声明:
作者:chun
链接:https://chun53.top/343.html
文章版权归作者所有,未经允许请勿转载。
THE END