您的位置:首页 > Web前端 > JavaScript

So, you think you know JavaScript?

2014-04-15 12:25 405 查看
Baranovskiy
参考:http://dmitry.baranovskiy.com/post/91403200

题目一:


if (!("a" in window)) {
var a = 1;
}
alert(a);



答案:undefined
关键点:js的所有变量自动提前声明
全局变量挂载在window下

题目二:


var a = 1,
b = function a(x) {
return x && (x + a(--x));
};
alert(a);



答案:1
关键点:函数声明与函数表达式的区别;
函数声明会覆盖变量声明但不会覆盖变量赋值;
声明的函数名与函数表达式的别名优先放在函数的作用域中;
其他:执行b(2)得到3
延伸:


var a = 1;
function a(x) {
return x && (x + a(--x));
};



a依然是1,a(2)会报错“TypeError: number is not a function”
补充:解析时先提前声明后赋值,函数声明覆盖变量声明
再延生:


var a;
function a(x) {
return x && (x + a(--x));
};



执行a(2)得到3,a++得到NaN,
将var a;移到最后依然得到同样的结果。

题目三:


function a() {
alert(this);
}
a.call(null);a.call({});



答案:[object Window]、[object Object]
关键点:call的this指定功用
null将被无视,同样的还有undefined
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: