Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止前端的lodash和下划线之间发生冲突_Javascript_Underscore.js_Lodash - Fatal编程技术网

Javascript 防止前端的lodash和下划线之间发生冲突

Javascript 防止前端的lodash和下划线之间发生冲突,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,在前端,似乎没有防弹的方法来防止下划线和lodash之间的冲突 我们可以这样做: <script src="/scripts/vendor/underscore/underscore.js"></script> <script> window._us = window._; delete window._; </script> <script src="/scripts/vendor/lodash/lodash.js">

在前端,似乎没有防弹的方法来防止下划线和lodash之间的冲突

我们可以这样做:

<script src="/scripts/vendor/underscore/underscore.js"></script>
<script>
    window._us = window._;
    delete window._;
</script>
<script src="/scripts/vendor/lodash/lodash.js"></script>

窗口。u us=窗口。u;
删除窗口;

但这似乎还不够好。是否有一种方法可以同时使用这两个库或我们必须选择?

noConflict
主题中,当下划线或lodash全局加载时,它们将覆盖全局
\uuu
变量。调用
noConflict()
将反转此操作,将
\uu
设置为其先前的值,并返回
\u
的实例。在下面的示例中,我评论了全局
\uu
值在每次操作后的变化

<!-- the global _ will now be underscore -->
<script src="/scripts/vendor/underscore/underscore.js"></script>

<!-- the global _ will now be lodash -->
<script src="/scripts/vendor/lodash/lodash.js"></script>

<script>
// the global _ will now be underscore
window.lodash = _.noConflict();

// the global _ will now be undefined
window.underscore = _.noConflict();
</script>

//全局uu现在将是下划线
window.lodash=\ u0.noConflict();
//全局uu现在将是未定义的
window.underline=\.noConflict();

它们有兼容的API,为什么您要同时使用这两种API?我们使用的是lodash上不存在的下划线函数,例如389;。为什么下划线和lodash都没有noConflict()方法?(调用该方法,不要尝试手动执行。)如果您需要
\uu.where
或lodash没有的其他东西,那么为什么不直接用补丁将其修补?在我看来,试图同时使用这两个函数是错误的。您还可以查看,以了解如何使用兼容的lodash函数替换下划线的u.where等函数(消除下划线依赖项的需要)