当setTimeout调用它的匿名回调时,为什么'我'和'this'未定义?
var gMyObj = new MyObj();
gMyObj.myFunc();
function MyObj() {
this.myFunc = function () {
var me = this;
alert(me.constructor); // defined
setTimeout(function(me) {
alert(me.constructor); // undefined
}, 100);
};
}
解决方案:所选答案是正确的,谢谢。我的问题是简化了我遇到的真正问题,结果证明jQuery在click()方法中修改了'this',以便它指向相关的DOM元素。我创建了一个新的var,'me',以保持'this',并试图将其传递给click方法。我需要做的只是在click事件中使用'me',并让闭包保持对它的引用。将'me'传递给click()失败,原因与此示例中失败的原因相同,即click()没有预料到它。
答案 0 :(得分:10)
因此:
function(me) {
成功:
function() {
你很高兴。
关于'为什么?'部分,您正在定义一个带有名为me
的参数的匿名函数。当setTimeout()
调用该函数时,它不传递任何参数,这意味着me
将是未定义的。从参数列表中删除me
允许先前定义的me
在函数中可见。