this作用域问题

dongqishu 2011-07-07 03:30:15
var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x);
}, 10);
}
};
o.doIt();
第一个弹出20,第二个弹出10都好理解,请问为什么最后一个是undefined。谢谢!
...全文
154 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongqishu 2011-07-07
  • 打赏
  • 举报
回复
又试了一下,
            function a() { alert(this) }
a();

定义一个函数,alert(this)的结果就是[object window]
Li103ZzZ 2011-07-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070604/13/22753f84-3634-478e-aed3-f5dfe8958153.html
kyzy_yy_pm 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dongqishu 的回复:]

3楼的有道理。

4楼的好像有问题,this好像代表的不是当前的function。因为我改成

var o = {
x: 10,
doIt: function doIt() {
var x = 20;
setTimeout(function() {
alert(this);
}, 10);
}
};
o.doIt();

弹出的是……
[/Quote]
看来是我弄错了
dongqishu 2011-07-07
  • 打赏
  • 举报
回复
setTimeout(function() {
alert(this.x)//这里的this,以经不是o这个对象了,是顶层的window对象,window对象下没有 x属性,自然弹出undefined了
}, 10);
那这里为什么是window调用它呢?function(){}是个匿名函数,感觉没人调用它?
lsw645645645 2011-07-07
  • 打赏
  • 举报
回复
this 指向改变了。谁调用指向谁
dongqishu 2011-07-07
  • 打赏
  • 举报
回复
3楼的有道理。

4楼的好像有问题,this好像代表的不是当前的function。因为我改成

var o = {
x: 10,
doIt: function doIt() {
var x = 20;
setTimeout(function() {
alert(this);
}, 10);
}
};
o.doIt();

弹出的是[object window]
kyzy_yy_pm 2011-07-07
  • 打赏
  • 举报
回复
setTimeout(function() {
alert(this.x);
}, 10)



这里的this代表的是当前的function,可是当前function并没用x这个属性,要想用到你需要如此:

setTimeout(function(x) {
alert(x);
}, 10)
挨踢直男 2011-07-07
  • 打赏
  • 举报
回复
Function.prototype.bind= function(x)
{
var f = this;
return function()
{
f.call(x)
}
}

var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x)
}.bind(this), 10);
}
};
o.doIt();


或者这样,改变方法调用的对象
挨踢直男 2011-07-07
  • 打赏
  • 举报
回复
x="111"//这个加上看看
var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x)//这里的this,以经不是o这个对象了,是顶层的window对象,window对象下没有 x属性,自然弹出undefined了
}, 10);
}
};
o.doIt();
xjh103 2011-07-07
  • 打赏
  • 举报
回复
作用域的问题

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧