gpt4 book ai didi

javascript - 编写 meteor 包时的可变范围

转载 作者:搜寻专家 更新时间:2023-11-01 05:23:12 25 4
gpt4 key购买 nike

当我在 meteor 包中编写 js 文件时,我有以下代码:

A = 1;
console.log(A);
console.log(window.A);

我想知道为什么第一个 console.log 打印 1 而第二个打印 undefined。

最佳答案

发生这种情况是因为 bundler 足够智能,可以解析您的包源代码以查找全局变量。毕竟,你的包的(生成的)代码(即实际加载到浏览器的代码)前面是这样的:

/* Package-scope variables */
var A;

这应该解释一切;)

如果你真的想导出你的变量以便在你的包之外可用,请按照@sbking 告诉你的那样做,所以在 package.js 中写:

// was Package.on_use in older Meteor versions
Package.onUse(function (api) {
api.export('A');
});

编辑

要记住的一件事是,当你在文件的开头放置 use strict 语句时,Meteor 将不再检测隐式全局变量,除非它们用 api 显式导出。导出。因此,只有当您希望在包代码中使用私有(private)全局变量时,这才会出现问题。

请注意,当严格模式处于事件状态并且这些变量未放入“preamble”包中时,尝试将值赋给 undefined variable 将导致运行时错误,因此这实际上是一个交易破坏者。看here有关此问题的更多详细信息。

一个简单的解决方法是将所有私有(private)全局变量放在一个文件中,开头没有 use strict 语句:

// globals.js
// no "use strict" statement here ...
MyPrivateVariable1 = null;
MyPrivateVariable2 = null;

关于javascript - 编写 meteor 包时的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077967/

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