var num = 10;
function foo(){
this.num = 1;
}
foo();
alert(num);
当不调用函数foo()时,弹出10.
调用函数foo()后,因为函数直接在全局中调用,this指向全局window.结果弹出1
var num = 3;//window 下num是3
var obj = {};
obj.num = 5;
obj.f = function(){
alert(this.num);//this for object{num:5}
}
obj.f();
alert("全局num"+num);
运行结果:先弹出5.因为this指向object{num:5}
再弹出:全局num3.this指向window
var num = 2;
function foo() {
return function fun() {
return this.num;
}
}
var f = foo();
console.log(f());
运行结果:2。函数返回后指向全局window
var o = {num:100}
var num = 10;
var obj = {};
obj.num = 1;
obj.f = function(){
alert(this.num)
}
obj.f();//this for obj
//如果第一个参数为空,函数内部this指向window
obj.f.apply();//this for window
obj.f.apply(obj)//this for obj
obj.f.apply(o)//this for o
运行结果:先后弹出10 1 100
//Q1:this for what
var say = "hello world";
var obj = {};
obj.say = "hello object";
obj.foo = function(){
return function(){
return this.say;
}
}
alert(obj.foo()());//返回函数在window运行
运行结果:弹出hello world。相当于:
var f = obj.foo();
alert(f());
var say = "hello world";
var obj = {};
obj.say = "hello object";
obj.foo = function(){
var that = this;
return function(){
return that.say;
}
}
var f = obj.foo();
alert(obj.foo()());
运行结果:hello object