在YUI JavaScript代码中使用以下代码保护有什么用?

时间:2013-05-22 17:08:09

标签: jquery yui javascript yui3

YUI3 library source code

if (typeof YUI != 'undefined') {
    YUI._YUI = YUI;
}

为什么需要将自己分配给现有self的成员变量(如果已经存在)?

更新:jQuery [2]也使用这种方法

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,

[2] https://github.com/jquery/jquery/blob/master/src/core.js

1 个答案:

答案 0 :(得分:4)

YUI和jQuery以不同的方式完成它,但出于同样的原因:尝试保持工作,以防你多次加载库。

jQuery提供jQuery.noconflict(),将jQuery$个全局变量恢复为之前的值。所以你可以安全地做到这一点:

<script src="jquery-1.9.js"></script>
<script>/* use jQuery */</<script>
<script src="jquery-1.8.js"></script>
<script>
(function ($) {
  // up here $ is jQuery 1.8
}(jQuery.noconflict());
// down here $ is jQuery 1.9
</script>

YUI不提供noconflict机制,但它会尝试保持运行。该库在YUI.Env对象中保留一些全局状态。如果替换了该对象,则引用YUI.Env的先前加载的组件的状态将中断,因此YUI将旧的_YUI.Env复制到新的Env对象中。