var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
setTimeout(this.showName, 1000);
setTimeout(function(){
nameObj.showName()
}, 1000);
}
};
nameObj.waitShowName();
一般而言翘骂,在Javascript中肿嘲,this指向函數(shù)執(zhí)行時的當(dāng)前對象
The this keyword is relative to the execution context, not the declaration context.
- 當(dāng)沒有明確的執(zhí)行時的當(dāng)前對象時跃闹,this指向全局對象window惠猿。
var obj = {
bar: "bar",
foo: function(){
console.log(this);
}
};
obj.foo();
var bar = obj.foo;
bar()
- 在瀏覽器中setTimeout、setInterval和匿名函數(shù)執(zhí)行時的當(dāng)前對象通常是是全局對象window魄幕,當(dāng)然也有例外
foo(function (){
console.log(this)
});
function foo(fn){
fn.call({});
}
//el.addEventListener('click', bar, false);
*eval函數(shù) 指向當(dāng)前執(zhí)行環(huán)境
var name = "window";
var Bob = {
name: "Bob",
showName: function(){
eval("alert(this.name)");
}
};
Bob.showName(); //Bob
當(dāng)然還有很多很多例子相艇,
涉及 new 還有es5中的 call,apply,bind, 以及es6中的() => {} lambda
有趣的例子(λx.x*x)(λx.x+2) js可以寫成 (x => x + 2)((x => x * x)(2))
不一一列舉了。