严格模式与非严格模式this指向

严格模式的体现:

在当前作用域的第一行加上”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或者undefinedthis也是指向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。

猜你喜欢

转载自blog.csdn.net/luoyumeiluoyumei/article/details/80867704
今日推荐