gpt4 book ai didi

javascript - nodejs 与 Chrome 中的不同全局对象

转载 作者:搜寻专家 更新时间:2023-11-01 00:35:01 24 4
gpt4 key购买 nike

<分区>

我正在查看 You Don't know JS series - this and Object prototype 中提供的示例.我稍微更改了代码并在 Chrome 和 Node Js 上对其进行了测试。输出有所不同。所以这是代码:

function foo(num) {
// keep track of how many times `foo` is called
this.count++;
}

var count = 9999;
var i;
for (i=0; i<10; i++) {
if (i > 5) {
foo( i );
}
}
console.log(count);

Chrome( 73.0.3683.75 )10003

NodeJS(v6.10.2)9999

据我了解,在 foo() this 中引用全局对象,因为函数被直接调用。因此,this.count 引用全局对象上的计数变量。因此,当“this.count++”执行时,它实际上会导致在全局对象(在 Chrome 中为 window)上创建一个新的计数变量并递增相同的变量。

让我感到困惑的是,在 NodeJs 的情况下,行为是不同的。如果我稍微修改如下代码以检查 Node 中全局变量的计数值,我会看到它的值为 NaN。修改后的 NodeJs 代码

function foo(num) {
this.count++;
}

var count = 9999;
var i;
for (i=0; i<10; i++) {
if (i > 5) {
foo( i );
}
}
console.log(count);
console.log(global.count);

输出

9999
NaN

所以,我想了解为什么我们在 Chrome 和 NodeJs 中有两种不同的行为。

此外,Kyle 说下面问题的答案将在第 2 章中找到,“它是如何全局的,为什么它最终是 NaN 而不是一些适当的计数值?” (见第二章)”但该书第2章并未对该问题作出任何解释。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com