!! this 总是指向调用它的对象
调用函数的 四种 模式
- 普通函数调用模式
- 对象属性[方法]调用
- new 构造函数调用
- apply/call 调用
普通函数调用
var a = 0;
function test() {
var a = 10;
console.log(this.a);
}
test(); // a = 0
// 此时 this 指向的是 window 全局对象
对象属性[方法]调用
var a = 0;
var obj ={};
obj.a = 10;
obj.test = test;
function test() {
console.log(this.a);
}
obj.test(); // a = 10
// this 指向 obj 对象
// ?? 问题: test 函数在声明并定义前调用也可以成功? 函数提升?
new 构造函数调用模式
var a = 0;
function test() {
console.log(this.a);
}
var test1 = new test(); // a = undefined
// this 指向 new 构造函数
apply / call 调用
var a =0;
var obj = {};
obj.a = 10;
function test() {
console.log(this.a);
}
test.apply(obj,[]); // a = 10
test.call(obj); // a = 10
// apply 和 call 的区别是 apply 额外带一个数组参数
2016年8月1日16:27:12
思考如下问题
var a = 10;
function test() {
a = 5
console.log(this.a);
console.log(a);
var a ;
console.log(a);
console.log(this.a);
}
test()