关于多个前端框架中消除$符冲突的疑问

发布于 2022-09-02 20:07:28 字数 498 浏览 18 评论 0

项目中同时使用了jQuery和zepto这两种框架,注意到一段js代码如下:

function slideToggleMenu() {
    jQuery(function ($) {
        $("#showMenu,.kelelogo").unbind("click");
        $("#showMenu,.kelelogo").click(function (e) {
            e.preventDefault() || e.stopPropagation();
            $("#mainMenu").slideToggle();
        });
    });
}

前辈解释说这里的$符代表了jQuery,而页面中其余部分的$都代表zepto,请问以下这种结构怎么理解?

jQuery(function($){});

我只知道(function($){}(jQuery))的形式可以消除$符的冲突

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤檠 2022-09-09 20:07:28

首先要清楚形参和实参的概念。
然后要知道jQuery这个库里定义了一个函数,名叫jQuery。你展示的这段代码就是调用了一次jQuery函数,参数是一个回调函数。
这样调用jQuery的话,jQuery就会稍后在执行这个回调函数的时候,传入一个参数,值就是jQuery本身。因此在这个回调函数中,第一个参数就是jQuery本身,也就解决了冲突。
如果你明白了形参的概念,你就会明白这是怎么工作的。并且也会明白为什么下面的代码是对的:

jQuery(function (a) {
    // 这里的a就是jQuery
    a("#shouMenu, .kelelogo").unbind("click");
});
夏至、离别 2022-09-09 20:07:28
jQuery(function($){
    //把$作为jQuery的别名, 只有在这函数里有效
});

jQuery 本身就有考虑到多库共存, 最简单就是用
var jq = jQuery.noConflict();

如果是插件, 就用

(function($){

}(jQuery));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文