Javascript小学生都知道了javascript中的函数调用时会 隐性的接收两个附加的参数:this和arguments。参数this在javascript编程中占据中非常重要的地位,它的值取决于调用的模式。总的来说Javascript中函数一共有4中调用模式:方法调用模式、普通函数调用模式、构造器调用模式、apply/call调用模式。这些模式在如何初始化关键参数this上存在差异。“可能还有小伙伴不知道它们之间的区别,那我就勉为其难撸一撸吧!”

你不知道的this—JS异步编程中的this

  • 方法调用模式:函数是在某个明确的上下文对象中调用的,this绑定的是那个上下文对象。

  • 普通函数调用模式:默认情况下,如果函数是被直接调用的,如果在严格模式下,就绑定到undefined,否则绑定到全局对象。

  • 构造器调用模式:函数通过new操作符调用,this绑定的是新创建的对象。

  • apply/call调用模式:函数通过apply或者call调用,this绑定的是指定的对象,如果把null或者undefined作为this的绑定对象传入call/apply,在调用时会被忽略,实际应用的是默认绑定规则。

下面举一个简单的综合例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var a=2;
function foo(b) {
    this.b=b;
    console.log(this.a);
}
 
var obj={
    a:4,
    foo:foo
};
 
foo();//普通函数调用,输出2
obj.foo();//作为对象方法调用,输出4
foo.call(obj);//call显示绑定,输出4
foo.call(null);//输出2
 
var bar=new foo(8);//构造函数调用,输出了undefined(由console.log(a)打印)
console.log(bar.b)//输出8

相关文章: