gpt4 book ai didi

javascript - Node.js 和 Node.js REPL 之间的差异

转载 作者:行者123 更新时间:2023-11-30 20:35:51 25 4
gpt4 key购买 nike

<分区>

我正在阅读“你不懂 JS”系列丛书,我尝试运行代码片段:

function foo() {
console.log( this.a );
}

function doFoo(fn) {
// `fn` is just another reference to `foo`

fn(); // <-- call-site!
}

var obj = {
a: 2,
foo: foo
};

var a = "oops, global"; // `a` also property on global object

doFoo( obj.foo ); // "oops, global"

(你可以在 3d 书的第 2 章中找到它:'this' All mean sense now)

如果我将其保存到“foo.js”中并使用 node foo.js(v 8.11.1)运行它,那么我会得到 undefined。而如果我启动 Node REPL 并输入相同的代码,我会得到:

> function foo() { console.log(this.a); }
undefined
> function doFoo(fn) { fn(); }
undefined
> var obj = { a:2, foo:foo };
undefined
> var a = "oops, global";
undefined
> doFoo(obj.foo);
oops, global
undefined

正如书中预期的那样。在 Firefox 开发控制台上的结果相同。

如果我删除声明并只保留赋值 a = "oops, global" 那么它会在 REPL 和 Node.js 上按预期运行。这对我来说更有意义,因为通过这种方式我在全局对象上设置了一个属性,而在“原始”方式中我只是声明了一个变量。

任何人都可以向我解释这种行为吗?谢谢大家。

编辑:我想我已经接近解决方案了,我注意到如果我制作的脚本 foo.js 仅包含:

var x = 42;
console.log(this);

我得到 {},所以 x 没有附加到全局对象。如果我启动 Node.js REPL 并输入相同的代码,我会得到一个附有 x 的大对象:

{
...
x: 42
}

所以我认为区别在于“谁是全局对象?”在 REPL 和 Node.js 中。

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