当setTimeout调用它的匿名回调时,为什么'me'和'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()没有预料到它.
因为这:
function(me) {
做了:
function() {
你很高兴去.
至于'为什么?' 部分,您正在定义一个带有被调用参数的匿名函数me
.当setTimeout()
函数调用时,它不传递任何参数,意思me
是未定义的.me
从参数列表中删除允许先前定义的me
在函数内可见.