超级棘手的Javascript测验,需要弄清楚答案
Super Tricky Javascript quiz, need to figure out about the answer
//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? 我以为这个.x指的是1,但它似乎不对。我只是不明白为什么它返回 4
2.为什么它返回警报 2 而不是 1,我以为我把 a 传递给函数 a,据我所知,我把 1 传递给函数 foo,而 1 应该因为 a(当我通过时是 1(而发出警报......我只是不明白为什么它会提醒 2
-
运行时(在非严格模式下(调用
setTimeout()
回调,this
绑定到window
(全局上下文(,因此this.x
引用外部x
。 -
arguments
对象用作为函数的形式参数设置别名的一种方式。设置arguments[0]
的值也会将第一个声明参数的值设置为函数。
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 而不是 1
arguments
对象表示函数参数的列表。修改它时,您实际上修改了参数值:arguments[0] = 2
修改第一个参数a = 2
。
相关文章:
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- 我需要帮助弄清楚一旦窗口的垂直高度被滚动,如何切换一个元素
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- 我需要帮助弄清楚为什么;如果'声明不起作用
- 超级棘手的Javascript测验,需要弄清楚答案
- 无法弄清楚为什么我的标题的其余部分不会显示
- MDN文档中关于弄清楚XUL元素的段落是什么意思:“如何将覆盖扩展转换为无重启”
- 无法弄清楚为什么本机 Promise 变量未定义
- 试图弄清楚如何使汉堡菜单在打开后保持静止
- 需要帮助弄清楚这个 Js 的作用
- 无法弄清楚为什么提交按钮不起作用
- 试图弄清楚如何用html按钮触发我的代码
- 奇怪的函数valChange试图弄清楚是什么以及为什么
- 试图弄清楚某个网站的文本动画是否是用某个库或插件完成的
- 试图弄清楚为什么我无法解析我的 JSON 文件
- 无法弄清楚为什么 angularJS 模块无法加载
- Ajax 和 PHP 重新加载分页时无法弄清楚
- 无法弄清楚如何在快速中呈现新页面
- 无法弄清楚如何让 css/js 掩码代码在 meteor 中工作
- 无法弄清楚如何在节点.js中使用同步.js