//1st question
var x = 4,
obj = {
x: 3,
bar: function() {
var x = 2;
setTimeout(function() {
var x = 1;
alert(this.x);
}, 1000);
}
};
obj.bar();
//2nd question
function foo(a) {
arguments[0] = 2;
alert(a);
}
foo(1);
1.为什么它会返回4而不是1?我认为this.x参考1,但它似乎错了....我只是不明白为什么它返回4
2.为什么它返回警报2而不是1,我认为我将a传递给函数a,据我所知,我将1传递给函数foo,并且1应该因为a而警告(当时为1时我通过了....我只是不明白它为什么警告2
答案 0 :(得分:5)
运行时(在非严格模式下)调用http://PUBLIC_IP_ADDRESS/api/users
回调,setTimeout()
绑定到this
(全局上下文),因此window
指的是外this.x
。
x
对象用作别名函数形式参数的方法。设置arguments
的值也会将第一个声明的参数的值设置为函数。
答案 1 :(得分:1)
1。为什么它返回4而不是1?
注意第一次初始化:var x = 4
,它在非严格模式下将属性x
附加到全局对象:window.x = 4
。
setTimeout(function() {
var x = 1;
alert(this.x);
}, 1000);
setTimout()
回调有this
个上下文作为全局对象。实际上是在呼叫alert(this.x)
- > alert(window.x)
- > alert(4)
。
2.为什么它返回警报2而不是1
arguments
object表示函数参数列表。修改它时,实际上会修改参数值:arguments[0] = 2
修改第一个参数a = 2
。