【问题标题】:Problems with David Shariff's JavaScript QuizDavid Shariff 的 JavaScript 测验的问题
【发布时间】:2014-08-17 07:42:37
【问题描述】:

Quiz 需要一些帮助:

问题 5:

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

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

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

  1. 函数foo()添加到bar()的词法环境中。
  2. var foo = '11'; 覆盖此定义,而 foo 未定义。
  3. return foo; 执行时,foo 未定义。

初始化时会发生什么?有没有好的文档链接?

问题 12:

String('Hello') === 'Hello';

问:结果如何? 答:是的。

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

问题 20:

NaN === NaN;

问:结果如何? 答:错误。

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

【问题讨论】:

  • 将来最好一次提出和研究一个问题,而不是多个问题。

标签: javascript


【解决方案1】:

问题 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 作为 new 表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。

问题 20:

很大程度上是因为规范是这样说的。 NaN 不等于任何东西,包括它自己。基本原理是不要让两个错误的计算错误地相等。

【讨论】:

  • 问题5:我理解提升,但是变量初始化会发生什么?是不是因为foo已经定义了,var foo = '11'没有取消定义?
  • @masa 是的,准确地说。 var a = 10; var a;console.log(a) 日志 10
【解决方案2】:

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

Solutions: David Sharrif Quiz

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2021-01-24
    • 2022-11-06
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多