我有一个简单的 HTML 文件,其中包含一些简单的 javascript 文件。没有框架,没有模块。有一个主 JS 文件和其他 JS 文件中的辅助函数。
当我将其作为静态站点打开时,一切正常。一个文件中的 JS 代码能够调用另一文件中定义的函数。
当我尝试包裹捆绑器时,将其指向index.html
文件中,parcel 找到我所有的 JS 文件,并在开头添加一些内容,在文件名中附加一个哈希值,并修改我的 HTML 文件中的链接。一切都很棒。
然而,当我在浏览器中打开此页面时,结果发现我在一个 JS 文件中定义的代码无法看到其他 JS 文件中定义的函数,抛出ReferenceError: <func> is not defined
。当我检查 HTML 页面中包含的 JS 脚本时,这些函数确实是在全局范围内定义的。这有多奇怪?
据我所知,当parcel进行转译时,它在文件顶部设置了一些可以用作全局变量的变量:
var globalObject =
typeof globalThis !== 'undefined'
? globalThis
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: typeof global !== 'undefined'
? global
: {};
如果您在执行操作时查看文件parcel watch
您将在文件顶部看到它。
因此,基本上,如果您希望一个变量是全局变量,那么在您首先声明该变量的 javascript 文件中,您必须将其设置为将其附加到上面的任何一个全局变量。例如:
global.fruit = 'Mango';
or
window.fruit = 'Mango';
fruit
现在成为窗口的全局变量,您可以从其他 JS 文件中的全局范围访问它after设置全局水果对象的文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)