从函数调用读懂this的指向

2020-04-23  本文已影响0人  小龙虾Julian
1、ES5中JS的函数有3种调用方式

(1)func(param1, param2)
(2)obj.child.method(param1, param2)
(3)func.call(context, param1, param2)
我们常用和常见的是前两种方式,但实际上前两种都可以转换成第三种,如:
func(param1, param2) ——> func.call(undefined, param1, param2)
obj.child.method(param1, param2) ——> obj.child.method.call(obj.child, param1, param2)
于是,this就是第三种情况中的context

2、实例
function func(){
    console.log(this)
}
func()

等价于:

function func(){
    console.log(this)
}
func.call(undefined)     // window

解析:按理说this指向的就是undefined,但是浏览器有一条规则:如果你传的 context 就是 null 或者 undefined,那么 window 对象就是默认的 context(严格模式下默认 context 是 undefined),因此上面输出的是 window。

3、总结:

(1)this就是call一个函数时传入的context
(2)如果所给函数的调用形式不是call形式,可以按照1中的情况进行转换

上一篇下一篇

猜你喜欢

热点阅读