严格模式的体现:
在当前作用域的第一行加上”use strict”,那么当前作用域下再执行代码都是按照严格模式执行的
严格模式与非严格模式中的this
1.自执行函数
非严格模式:
(function a() {
console.log(this)//window
})()
----------
严格模式:
"use strict";
(function a() {
console.log(this)//undefined
})()
2.方法执行,方法名前面没有点
非严格
var fn=function () {
console.log(this)
};
fn();//window
-----------------
严格模式
"use strict";
var fn=function () {
console.log(this)
};
fn();//undefined
3.call、apply、bind
非严格模式,this传参用null或者undefined,this也是指向window
var fn=function (...a) {
console.log(this,a);
};
fn.call(undefined,1,2,3);//window [1 2 3]
---
var arr=[2,4,3];
var fn=function (...a) {
console.log(this,a);
};
fn.apply(null,arr);//window [1 2 3]
--------------------------------------------------------
严格模式下,this传对应的参数是什么,this就指向什么
"use strict";
var fn=function (a) {
console.log(this,a);
};
fn.call(null,1);//null 1
fn.call(undefined,1);//undefined 1
总结:
非严格模式下默认指向window,
严格模式下传null指向null,不传或者传undefined都指向undefined。