真正混淆关于'new'和'this'运算符的javascript测验

时间:2015-11-18 21:41:56

标签: javascript

var x = 0;
function foo() {
    x++;
    this.x = x;
    return foo;
}
var bar = new new foo;
console.log(bar.x);

控制台中记录了什么?

我正在准备javascript求职面试,并且遇到了一个问答here

令人困惑......

你能帮我解释一下发生了什么吗?

2 个答案:

答案 0 :(得分:1)

如果将其复制到控制台,则会将其复制到日志undefined。这是为什么?

构造函数返回自身,构造函数

这意味着您可以根据需要在new前面写foo,并且永远不会返回foo的实例。

构造函数迭代x

但是,每次调用构造函数时,即使没有new,它也会迭代外部x变量。因此,如果您在此函数之外访问x,它将被迭代到foo函数被调用的次数。

new可以调用没有括号的构造函数

new foo会自动调用没有参数的foo,就像代码是new foo()

一样

构造函数没有x属性

console.log语句查找x的{​​{1}}属性时,它实际上是在bar函数对象上查找一个。该属性在foo上不存在,因此结果为foo

答案 1 :(得分:0)

  1. 返回foo应返回对象,而不是其中的值,也不是来自它的调用。

  2. CareerCups应该有一些JavaScript。您还可以查看CodeWars来练习您学到的知识,并了解忍者如何使用他们的JavaScript代码。