首页 > javascript关于函数的调用者。

javascript关于函数的调用者。

声明一个普通函数:

function foo() {
    console.log('foo is executing');
}

// 如果不显示的声明函数的调用者,为什么缺省情况下调用者会是window,有什么出处么。
foo();

在浏览器中,你的全局变量是window对象的属性,函数是window对象的方法


(Execution Contexts)


函数中的this就是函数的调用者

  1. 如果是通过对象的方法调用,即obj.method(params)这种形式的调用,this会被绑定成这个obj。

  2. 如果只是一个独立函数的调用,如你的例子,分为两种:

    2.1 一种是该函数为顶级函数(声明在全局作用域中的),于是该函数会成为该全局对象(window或者global)的一个同名属性,在非严格模式时method(params)的调用会变成`window.method(params)`或者`global.method(params)`,在严格模式中,method中的this会被绑定到`undefined`上.
    2.2 如果该函数不是顶级函数(在某函数中再声明的,成为一个局部函数), 则它的this在没有特别声明时,等同于包含它的函数的this。
  3. 特殊情况就是使用call, apply, bind函数来强制改变this的绑定。


这个JS引擎实现的规则喽~~

【热门文章】
【热门文章】