Javascript window.XXX=require(YYY)VS const{XXX}=require(YYY):使用哪个?

Javascript window.XXX=require(YYY)VS const{XXX}=require(YYY):使用哪个?,javascript,node.js,laravel,Javascript,Node.js,Laravel,标题说明了我想问的一切。我无法理解使用window和const{}的关键区别是什么 我两次都试了,结果都一样。你能帮我理解这个吗 另外,我使用的是Laravel,它使用的是window全局变量。有些库用常量{}显示方法。不同之处在于window.XXX=requireYYY将requireYYY调用返回的对象分配给window对象上的XXX变量。但是const{XXX}=requireYYY用于从requireYYY返回的对象中解包属性XXX。因此,在窗口范围内调用const{XXX}=requ

标题说明了我想问的一切。我无法理解使用window和const{}的关键区别是什么

我两次都试了,结果都一样。你能帮我理解这个吗

另外,我使用的是Laravel,它使用的是window全局变量。有些库用常量{}显示方法。

不同之处在于window.XXX=requireYYY将requireYYY调用返回的对象分配给window对象上的XXX变量。但是const{XXX}=requireYYY用于从requireYYY返回的对象中解包属性XXX。因此,在窗口范围内调用const{XXX}=requireYYY将等于window.XXX=requireYYY.XXX。现在到了使用哪一个的问题?答案是,在特定情况下,您需要什么。

需要可能是旧方法-这取决于您的环境

const foo = require('bar');
//is almost the same as
imrport foo from 'bar';
导入方法具有更多可能性,例如:

//file foo.js
export const myStr = 'lol';
export default (x)=>x**4;
export * as lol from './someFile';
其他文件:

import {myStr, lol}, defaultExported from './foo';
其思想是封装变量,以避免在两个地方意外地重新分配相同的变量,因此可能不再需要窗口。如果您需要一些变量/常量,请将其导入其他文件中。 如果您需要在您的环境中向后兼容,您可以使用巴贝尔在线版本 您了解laravel,因此请注意JavaScript常量中的一些差异:

const foo = 1;
foo = 2; //error
const arr = [1];
arr[0]++; //[2]
arr[1] = 'lol'; //no error
const obj = {};
obj.lol = 'man'; //it works

你喜欢用什么?我可以混合使用这两种变体,还是必须坚持使用某种变体?@Nod Prefer?这取决于你的使用情况。若您希望全局变量在任何地方都可用,若您不想意外地从使用常量的其他地方重新分配变量,请使用window.xxx。您可以同时使用这两种方法。这取决于您是需要从Requireyy返回整个对象,还是只需要它的一个或几个成员属性。如果需要XXX和ZZZ,可以执行const{XXX,ZZZ}=requireYYY。谢谢你的全面回答。