javascript知识点

this详解

2018-01-15  本文已影响0人  jweboy_biu

含义

解析

调用栈(可以比拟成函数调用链)


function foo() {
    // 当前调用栈 => foo
    // 当前调用位置 => global全局作用域
    
    console.log('foo')
    bar() // bar调用位置
}

function bar() {
    // 当前调用栈 => foo -> bar
    // 当前调用位置 foo
    
    console.log('bar')
}

绑定规则

注意点


隐式绑定会丢失绑定对象,从而应用默认绑定,分别有以下两种情况。

  1. 函数别名 => 引用函数本身,so默认绑定

    function foo() {
        return this.a
    }
    
    const obj = {
        a: 'hello',
        foo, // 函数引用,当前上下文是obj
    }
    
    const a = 'on no, this is global'
    const bar = obj.foo // 函数别名
    bar() // 'on no, this is global'
        
    
  2. 参数传递 => 隐式赋值,同上

    function foo() {
        return this.a
    }
    
    function doFoo(fn) {
        
        fn() // fn => foo
    }
    
    const obj = {
        a: 'hello',
        foo, // 函数引用,当前上下文是obj
    }
    
    const a = 'on no, this is global'
    doFoo(obj.foo) // 'on no, this is global'
        
    

优先级

上一篇 下一篇

猜你喜欢

热点阅读