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

一些非常蛋疼的JavaScript试题
JavaScript有很多地方和我们熟知的C、Java等的编程习惯不同,这些不同会产生很多让人意想不到的事情。前段时间在知乎有人发了写Javascrtip试题,觉得挺好玩的,这里跟大家分享一下。

01
(function () {  
    return typeof arguments;  
})();  

A. "object"
B. "array"
C. "arguments"
D. "undefined"


答案:A

02
var f = function g() {
        return 23;
    };
typeof g();

A. "number"
B. "undefined"
C. "function"
D. Error

答案:D

03
(function (x) {
    delete x;
    return x;
})(1);

A. 1
B. null
C. undefined
D. Error

答案:A

04
var y = 1,
    x = y = typeof x;
x;

A. 1
B. "number"
C. undefined
D. "undefined" 

答案: D

05
(function f(f) {
    return typeof f();
})(function () {
    return 1;
});

A. "number"
B. "undefined"
C. "function"
D. Error


答案:A

更多蛋疼的试题,可以看看这里 非常蛋疼的JavaScript试题。
20 楼 clue 2011-06-23  
int08h 写道

这算啥,Firefox有更恶心的
if (0) {
    function abc() {
        
    }
}
abc();

我发的那段代码,在IE下第一个alert弹出的是false 
21 楼 int08h 2011-06-23  
clue 写道
int08h 写道

这算啥,Firefox有更恶心的
if (0) {
    function abc() {
        
    }
}
abc();

我发的那段代码,在IE下第一个alert弹出的是false 

IE的具名函数表达式有2次Evaluate过程,这个在2000年前讨论得比较激烈,现在大家忘得差不多了……
22 楼 shuaiji 2011-06-23  
明明是抄错了啦吧,我看上面有个 3 和 4 是不一样的
23 楼 abraham_xi 2011-06-23  
int08h 写道
1、arguments不是object还能是啥,typeof只能返回number / string / boolean / object / function,明猜也是object……

2、函数表达式中的函数名仅在该函数的执行环境内有效,所以外面g不存在,直接访问不存在的全局属性是ReferenceError

3、var定义的(除非是在eval中用var定义)、参数、某些内置对象和宿主对象具有{DontDelete}特性,必然不能删

4、不知道在说啥,有啥区别吗?

5、就这一题有点意思,关系到进入函数时的参数顺序,依次是函数本身->参数->var声明,因此参数的f覆盖函数自己的函数名f,f()就是1,typeof 1就是number

对于技术比较泛的工程师来说,可能会蛋疼,但是对于专职的前端工程师,这些是基础……


对于第二题IE下面能运行成功,上面对于第二题的解释还正确吗??
24 楼 int08h 2011-06-23  
abraham_xi 写道
int08h 写道
1、arguments不是object还能是啥,typeof只能返回number / string / boolean / object / function,明猜也是object……

2、函数表达式中的函数名仅在该函数的执行环境内有效,所以外面g不存在,直接访问不存在的全局属性是ReferenceError

3、var定义的(除非是在eval中用var定义)、参数、某些内置对象和宿主对象具有{DontDelete}特性,必然不能删

4、不知道在说啥,有啥区别吗?

5、就这一题有点意思,关系到进入函数时的参数顺序,依次是函数本身->参数->var声明,因此参数的f覆盖函数自己的函数名f,f()就是1,typeof 1就是number

对于技术比较泛的工程师来说,可能会蛋疼,但是对于专职的前端工程师,这些是基础……


对于第二题IE下面能运行成功,上面对于第二题的解释还正确吗??


IE那是他的实现错误,说严重点就是IE的BUG……因为根据ECMA262的标准而言,我的解释是正确的,当然如果考虑各浏览器下的表现行为,我的答案需要有一些改动……
25 楼 gaoshouzhen1987 2011-06-23  
写这样代码的人,应该开除掉
26 楼 咖啡豆子 2011-06-23  
这些题都没什么意义,这么写严重恶化了代码质量