this

  • 在向其他执行上下文的传递中,确保this的指向保持不变

    如下面的例子中,我们期待的是getA被obj调用时,this指向obj,但是由于匿名函数的存在导致了this指向的丢失,在这个匿名函数中this指向了全局,因此我们需要想一些办法找回正确的this指向。

    var obj = {
        a: 20,
        getA: function() {
            setTimeout(function() {
                console.log(this.a)
            }, 1000)
        }
    }
    
    obj.getA();

    常规的解决办法很简单,就是使用一个变量,

  • 1 词法作用域 vs 动态作用域

    词法作用域(static scope == Lexical scope)的函数中遇到既不是形参也不是函数内部定义的局部变量的变量时,去函数定义时的环境中查询。

    动态作用域(dynamic scope)的函数中遇到既不是形参也不是函数内部定义的局部变量的变量时,到函数调用时的环境中查。

    2 ES5三种函数调用形式下的this

    JS(ES5)里面有三种函数调用形式,ES5中函数中的this是由调用时的形参决定的,与静态作用域或者动态作用域无关。

    func(p1, p2) ;
    obj.child.method(p1, p2);
    func.call(conte