Javascript小学生都知道了javascript中的函数调用时会 隐性的接收两个附加的参数:this和arguments。参数this在javascript编程中占据中非常重要的地位,它的值取决于调用的模式。总的来说Javascript中函数一共有4中调用模式:方法调用模式、普通函数调用模式、构造器调用模式、apply/call调用模式。这些模式在如何初始化关键参数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