http://news.cnblogs.com/n/165436/
mitry Baranovskiy 的博客中有篇文章(链接),其中有五段小代码,用来测试是否理解 JavaScript 的核心,闭包和作用域。大家先试着给出 alert 语句的输出结果。之后再建一个测试文件,检测你的答案。
一
vara = 1;
}
alert (a);
二
b = functiona (x) {
x && a (--x);
};
alert (a);
三
returnx * 2;
}
vara;
alert (a);
四
arguments[2] = 10;
alert (a);
}
b(1, 2, 3);
五
alert (this);
}
a.call (null);
额,我是搞web前端的,来此测试一番。。。。个人知识有限,请指教: 一//////////////////////////////////////////////////////////////////////////////////////////////////// if (!("a" in window)) { var a = 1; } alert (a); 答案:undefined ; 因为"a"这种变量定义,在js中会默认提前;代码相当于: var a; if (!(window.a in window)) { var a = 1; } alert (a); 二//////////////////////////////////////////////////////////////////////////////////////////////////// var a = 1; var b = function a (x) { x && a (--x); }; alert (a); 答案:1; 这道题应该是考的,函数定义问题,因为函数申明会提前,此题相当于: function a (x) { x && a (--x); }; var b = a; var a = 1; alert (a); 三//////////////////////////////////////////////////////////////////////////////////////////////////// function a (x) { return x * 2; } var a; alert (a); 答案是:函数体,a若是未定义的话,将会忽略;好吧,此题我蒙的。。。 四//////////////////////////////////////////////////////////////////////////////////////////////////// function b (x, y, a) { arguments[2] = 10; alert (a); } b(1, 2, 3); 答案为:10,argument为活动对象,值会跟着变的 五//////////////////////////////////////////////////////////////////////////////////////////////////// function a () { alert (this); } a.call (null); 此题相当于: function a () { alert (this); } a.call (window);