英文原文地址: http://dmitry.baranovskiy.com/post/91403200
Dmitry Baranovskiy 的博客中有篇文章(http://dmitry.baranovskiy.com/post/91403200),其中有五段小代码,用来测试是否理解 JavaScript 的核心,闭包和作用域。大家先试着给出 alert 语句的输出结果。之后再建一个测试文件,检测你的答案。
一
JavaScript code
1
2
3
4
5
if(!("a"inwindow)) {
vara = 1;
}
alert (a);
二
JavaScript code
1
2
3
4
5
6
vara = 1,
b = functiona (x) {
x && a (--x);
};
alert (a);
三
JavaScript code
1
2
3
4
5
6
functiona (x) {
returnx * 2;
}
vara;
alert (a);
四
JavaScript code
1
2
3
4
5
6
functionb (x, y, a) {
arguments[2] = 10;
alert (a);
}
b(1, 2, 3);
五
JavaScript code
1
2
3
4
5
functiona () {
alert (this);
}
a.call (null);
先给答案,在去测试。
一:undefined
解释,开始 a 为 undefined,但 undefined 当然存在于 window 中,So...
二:1
解释,方法a只能在a方法内使用a调用,即a(),其它域使用b(),以a作为b方法的方法名。
三:方法a
解释,var a; 仅是定义,并无赋值。
四:10
解释,输出arguments每个值都与参数有引用关系,以前无聊时测试过。
五:window
解释,a()/a.call()/a.call(null)无区别,经验。