【问题标题】:window.XXX = require(YYY) VS const {XXX} = require(YYY): which to use?window.XXX = require(YYY) VS const {XXX} = require(YYY):使用哪个?
【发布时间】:2019-06-14 01:07:00
【问题描述】:

标题说明了我想问的一切。我不明白使用 window 和 const {} 的主要区别是什么。

我都试过了,结果是一样的。你能帮我理解一下吗?

附:我正在使用 Laravel,它正在使用窗口全局变量。一些库使用 const {} 显示方法。

【问题讨论】:

    标签: javascript node.js laravel


    【解决方案1】:

    require 可能是旧方法 - 这取决于您的环境。

    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';
    

    这个想法是封装变量,以免在两个地方意外地重新分配相同的变量,因此可能不再需要 window 了。如果您需要一些变量/常量,请将其导入其他文件。 如果你需要在你的环境中向后兼容,你可以使用 babel(这里是在线版本)https://babeljs.io/repl/ 你知道 laravel,所以要注意 JavaScript const 的一些差异:

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

    【讨论】:

      【解决方案2】:

      不同之处在于window.XXX = require(YYY) 将从require(YYY) 调用返回的对象分配给window 对象上的XXX 变量。但是const {XXX} = require(YYY) 使用destructuring assignmentrequire(YYY) 返回的对象中解压缩属性XXX。所以在window 范围内调用const {XXX} = require(YYY) 将等于window.XXX = require(YYY).XXX。现在到问题使用哪个?答案是您在特定情况下需要哪个。

      【讨论】:

      • 你更喜欢用什么?我可以混合两种变体还是我必须坚持一些?
      • @Nod 喜欢?这取决于您的使用情况。如果您希望全局变量在任何地方都可用,那么您可以使用 window.xxx 如果您不想意外地从您使用 const 的其他地方重新分配变量。
      • 你可以同时使用。这取决于您是需要从require(YYY) 返回的整个对象,还是只需要它的一个或几个成员属性。如果你需要XXXZZZ,你可以做const {XXX, ZZZ} = require(YYY)
      • 就是这样。感谢您的全面回答。
      猜你喜欢
      • 2011-08-09
      • 2014-05-25
      • 1970-01-01
      • 2014-03-30
      • 2015-03-24
      • 2019-03-08
      • 2012-09-09
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多