严格模式在严格的条件下运行JS代码,在IE10以上版本的浏览器中才会被支持,就版本浏览器会被忽略.
1.为脚本开启严格模式
需要在所有语句之前放一个特定语句"use strict";(或者‘use strict‘;).
<script> ‘use strict‘; // 下面的js 代码就会按照严格模式执行代码 </script> <script> (function(){ ‘use strict‘;
var num = 10;
function fn(){} })(); </script>
2.严格模式里的变化
2.1.变量赋值之前必须先声明
之前我们这样写并不会报错
str = ‘严格模式‘;//默认全局变量 console.log(str);//‘严格模式‘
但是严格模式这样是不允许的,必须先声明.
‘use strict‘; var str = ‘严格模式‘; console.log(str);
其中涉及到的this指向问题,以前在全局作用域函数中的this指向window对象,严格模式下全局作用域中函数中的是this是underfined.
以前构造函数不加new,也能直接调用函数,严格模式下this指向undefined,除非new一下改变指向.
定时器中的this也是指向window的,严格模式下同样还是指向window.事件,对象还是指向调用者.
2.2已经声明的变量不能删除
比如delete x;就是不允许的.
2.3参数不能重名
非严格模式下可以覆盖,但严格模式下会报错
a=1; a=2; function fn(a,a){ console.log(a+a); } fn(a+a);//4;严格模式下报错
2.4不能在非函数的代码块内声明函数
非函数代码块里指的是if条件语句,for循环语句等,在函数中声明函数是被允许的.
总的来说,因为IE的EdgeHTML,到18年底迁移的Choromium,webkit,firefox,Opera,blink在国内的版本较多,因此考虑兼容的问题,严格模式在开发中并不是必要充分的条件.
原文:https://www.cnblogs.com/omiturix/p/11774874.html