【问题标题】:Zeptojs and $ (Global Variables)Zeptojs 和 $(全局变量)
【发布时间】:2013-09-23 14:48:26
【问题描述】:

起初,我认为 Zepto 仅在 $ 不可用时才定义一个“Zepto”全局变量。所以,我决定做这些测试:

First Fiddle - Pure Zepto

Second Fiddle - Zepto + jQuery

来源

HTML

<div id="first-global">
</div>
<div id="second-global">
</div>

JS

var first = document.getElementById('first-global'),
    second = document.getElementById('second-global');

first.innerHTML = $;
second.innerHTML = Zepto

两者的代码相同,唯一不同的是使用的框架。

因此,正如您在第一个小提琴中看到的那样,Zepto 初始化了两个变量 $ 和 Zepto。这不是(定义两个相同的全局变量)不好的做法吗?如果 $ 不可用,是否有一种方法可以定义 Zepto 全局?

【问题讨论】:

    标签: javascript jquery zepto


    【解决方案1】:

    来自 zeptojs.com:

    "Zepto 只会将 $ 全局设置为它自己,如果它尚未定义。 没有 Zepto.noConflict 方法。”

    所以这将取决于包含这些库的顺序。如果首先包含 jQuery,则 Zepto 不会覆盖全局 $。如果先包含 Zepto,则可以使用jQuery.noConflict 使$ 指向 Zepto。

    不,这不是一个坏习惯 - $ 是一个简短而简单的别名,而库也有它的全名作为全局。顺便说一句,我希望这纯粹是理论上的问题 - 为什么要将两个库都包含在一个页面上? ;)

    $ 不如图书馆自己的名字可靠(正如您的问题所证明的那样)。许多库可能会尝试设置全局 $,而像 jQueryZepto 这样的变量不太可能被意外覆盖。

    要确定$ 背后的内容,您可以使用以下模式:

    (function($){
       $('selector').doSomething();
    }(library));
    

    其中library 是您要引用的除$ 之外的另一个全局变量(Zepto 或 jQuery)。

    【讨论】:

    • 感谢您的回答 ;) 哈哈 其实,不是那么理论上。当我遇到 Zepto 时,我正在使用 jquery,当我很忙时,为了避免破坏我的应用程序,我同时使用了这两种方法。我知道它只会在未定义的情况下将 $ 设置为自身,我的疑问是为什么在 $ 设置为 Zepto 的情况下将 Zepto 保留为全局变量?
    • jQuery 和 Zepto 一起生活在一个页面上是一个荒谬的想法 - 创建 Zepto 是为了故意提供一些与 jQuery 相同的功能,但不会造成很多混乱。包含这两个库就像将两个不同版本的 jQuery 放在同一个页面上。
    • 我只在移动设备上使用 zepto。我计划尽快迁移到 Zepto,但现在,我有其他优先事项,不想冒险以任何原因意外破坏我的应用程序^^
    • 如果您想要 jQuery 的跨浏览器功能以及 Zepto 提供的轻量级和基于 CSS 的动画,您可以针对这两个库编写代码。否则,您将进行一些特征检测并包含一个另一个。
    • 明白了,维护 Zepto 变量以防其他库覆盖 $ 是有意义的。猜猜多一个全局变量不会对性能产生太大影响。谢谢,@pawel。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2018-06-15
    相关资源
    最近更新 更多