日期:2014-05-16  浏览次数:20337 次

你真懂JavaScript吗?

如果大家有兴趣(或者自认为对JavaScript了解还不错的人),可以尝试着回答一下下面5个题目的输出结果(不要google或baidu哦)。

至于正确结果嘛,自己可以将代码复制到浏览器里就可以看到了(稍后这两天,我会将详细的解释单独发帖整理出来)。

PS:大胆点,不管结果对不对,都把你的答案贴出来(最好带有自己的想法,后面我们和准确解释做对比,这也是学习的过程)。

正文

题目1:

if (!("a" in window)) {
    var a = 1;
}
alert(a);
复制代码

?

题目2

var a = 1,
    b = function a(x) {
        x && a(--x);
    };
alert(a);
复制代码

?

题目3:

function a(x) {
    return x * 2;
}
var a;
alert(a);
复制代码

?

题目4:

function b(x, y, a) {
    arguments[2] = 10;
    alert(a);
}
b(1, 2, 3);
复制代码

?

题目5:

function a() {
    alert(this);
}
a.call(null);
复制代码
1 楼 netsupper 2012-02-11  
1)a=1,答错了."a" in window 应该不存在window中,所以认为a=1,但我错了,不明白.
2)a=1,答对了.
3)a=undefined,答错了.判断错误,var a;这行不执行的?
4)答不出来.js竟然是地址引用?
5)this=null,竟然是window对象.

才对一题,哎
2 楼 极限_裁决 2012-02-13  
第一题,a 没有定义全局变量不属于 window
第二题,由于定义了全局变量a和方法a但是弹出的时候是调用了变量a而不是方法a,如果变量a不存在则会输出方法a的代码!
第三题,弹出undefined。因为没有初始化的变量都是为不明确!
第四题,10。
第五题,首先方法的作用域肯定是他本身,但是在下面一句代码中传进了新的作用域null的。这时候方法的作用域将指向为window.