David Shariff的JavaScript测验问题

时间:2014-08-17 07:42:37

标签: javascript

Quiz需要一些帮助:

问题5:

function bar() {
    return foo;
    foo = 10;
    function foo() {}
    var foo = '11';
}
alert(typeof bar());

问:什么是警报? 答:功能。

基于这个tutorial,即使它没有说清楚,这可能是我的误解,当bar()被调用时,我期待以下行为:

  1. 将函数foo()添加到bar()
  2. 的词汇环境中
  3. var foo = '11';会覆盖此定义,foo未定义。
  4. 执行return foo;时,foo未定义。
  5. 初始化会发生什么?任何良好文档的链接?

    问题12:

    String('Hello') === 'Hello';
    
    问:结果如何? 答:是的。

    我认为String()会返回一个对象而'Hello'是一个原始字符串,因此答案是" false"。为什么它是真的"?

    问题20:

    NaN === NaN;
    
    问:结果如何? A:假。​​

    逻辑是什么?这里发生了什么?

2 个答案:

答案 0 :(得分:3)

问题5:

这是因为提升,我更详细地回答了这个here

function bar() {
    return foo;
    foo = 10;
    function foo() {}
    var foo = '11';
}

在语义上与:

相同
function bar() {
    var foo = function(){}; // function declarations and 
                           // variable declarations are hoisted
    return foo;
    foo = 10;
    foo = '11';
}

问题12:

将某些内容作为函数调用String不会创建新对象。请注意,它不是作为构造函数调用的:

String("a"); // a primitive value type string "a"
new String("a"); // this creates a new string object

引用the specification

  

当String作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。

问题20:

几乎是因为规范说明了这一点。 NaN不等于任何东西,包括它自己。理由是不要错误地将两个错误估计相等。

答案 1 :(得分:1)

我已经完成了一系列javascript视频,其中我正在解释David Sharrif的所有javascript问题。看看这个播放列表:

Solutions: David Sharrif Quiz