ES5的严格模式
ES5的严格模式
为什么要设立严格模式
- 消除javascript语法不合理、不严谨的地方,减少一些怪异行为
- 保证代码运行安全
- 提高编译效率,增加运行速度
严格模式使用方法
-
全局
“Use strtic” n=10; console.log(n); -
局部
function fn(){ “Use strtic”; n=10; console.log(n); }
严格模式规则
-
不可以省略var声明变量
function show() { "use strict"; var a = uname = "刘德华"; console.log(uname); }报错: uname变量没有声明
-
禁止函数使用this指向全局变量
非严格模式函数内的this指向window,严格模式下this指向undefined
此处补充一下几种场景下this的指向 1. 函数内部的this指向window,严格模式下指向undefined 2. 事件绑定的this默认指向当前被绑定的元素 3. this在对象的函数里默认指向当前对象 4. this在箭头函数中默认指向上下文对象 5. 构造函数有显式返回值且该值是对象时,this指向这个这个对象; 如果返回的不是对象或者没有返回值时,this指向实例。 6. 定时器内的this指向window,因为定时器方法时定义在window下的 -
禁止函数内使用八进制方法
这个不必多说
-
不允许在非函数的代码块内声明函数
“use strict" if (true) { function fn4() { console.log(111) } }会报错Octal literals are not allowed in strict mode.
-
严格模式下arguments变量与形参不再同步
不使用严格模式:
function fn5(num){ num=20; console.log(arguments[0]); console.log(num); } fn5(10);//20,20使用严格模式改变形参:
function fn5(num){ "use strict"; num=20; console.log(arguments[0]); console.log(num); } fn5(10);//10,20使用严格模式改变arguments
function fn5(num){ "use strict"; arguments[0]=20; console.log(arguments[0]); console.log(num); } fn5(10);//20,10

浙公网安备 33010602011771号