设置jQuery插件

时间:2012-10-20 02:23:03

标签: jquery asp.net-mvc

我正在审查我们网站上的一些代码,直到我找到这个代码

<script>
    (function (a) {
        _q = function () { return a; };
        $ = function (f) { typeof f === 'function' && a.push(arguments); return $; };
        jQuery = $.ready = $;
    }([]));
</script>  

然后是一堆插件,包括jQuery 我只是不知道它意味着什么,我想知道它是如何工作的,所以我将能够操纵代码。任何人都可以逐行解释代码吗?

修改

对不好的代码感到抱歉。我也在徘徊它的使用,这就是我在这里问的原因。无论如何,这是head标签内的整个代码。

<head>
    <meta charset="utf-8">
    @foreach (string domain in
    ViewBag.Prefetches is string[] ? ViewBag.Prefetches : new string[] { })
    {
        @Html.Prefetch(domain)    
    }
    <title>
        @{@ViewBag.SiteName
            if (ViewBag.Title != null)
            {  @ViewBag.SiteDelimiter @ViewBag.Title } 
        }
    </title>

    <meta name="description" content="">
    <meta name="author" content="">
    <meta http-equiv="imagetoolbar" content="false">

    <link href="@Url.ContentArea("~/css/global/normalize.css")" rel="stylesheet" />

    @foreach (string stylesheet in
    ViewBag.Stylesheets is string[] ? ViewBag.Stylesheets : new string[] { @"style.css" })
    { 
        <link href="@Url.ContentArea("~/css/" + stylesheet)" rel="stylesheet" />
    }

    @RenderSection("CustomCss", required: false)

    <link href="@Url.ContentArea("~/css/global/helpers.css")" rel="stylesheet" />
    <link href="@Url.ContentArea("~/css/global/media.css")" rel="stylesheet" />

    <script src="@Url.ContentArea("~/js/global/modernizr-2.5.3.min.js")"></script>

    <script>
        (function (a) {
            _q = function () { return a; };
            $ = function (f) { typeof f === 'function' && a.push(arguments); return $; };
            jQuery = $.ready = $;
        }([]));
    </script>

    @RenderSection("OverrideJs", required: false)
</head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="@Url.ContentArea("~/js/global/jquery-1.7.2.min.js")"><\/script>');</script>
@foreach (string script in
    ViewBag.Scripts is string[] ? ViewBag.Scripts : new string[] { })
{ 
    <script src="@script"></script>
}
<script>
    Modernizr.load({
        test: window.JSON,
        nope: '@Url.Content("~/Scripts/Polyfills/json.polyfill.js")'
    });

    (function (i, s, q, l) {
        for (q = window._q(), l = q.length; i < l;) {
            $.apply(this, s.call(q[i++]));
        }
    }(0, Array.prototype.slice));

</script>
<!--[if lt IE 7 ]>
  <script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js"></script>
  <script>window.attachEvent("onload",function(){CFInstall.check({mode:"overlay"})})</script>
<![endif]-->

我无法提供链接,因为这些代码用于您必须登录的特定页面 无论如何,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

简短回答:如果加载了jQuery,它会记录

很长的回答:看起来它所做的就是添加一个变量“jQuery”(如果它已经加载),之后添加一个函数_q,它返回一个参数数组(这是一个存在于所有函数中的类似数组的变量'执行背景,谢谢FabrícioMatté)。据我所知,因为没有任何参数被发送到函数中,它所做的只是记录它被调用的范围。

看起来“jQuery”变量被进一步向下访问,如果没有设置它会加载jQuery。但我不认为它可以在那里被访问,因为我没有看到变量全局声明在任何地方。

它的用途是它首先尝试从Google的托管中加载jQuery。如果失败则在本地加载jQuery。