jquery函数(a,b)需要解释

jquery函数(a,b)需要解释,jquery,Jquery,我发现了这个密码,我不明白a和b在哪里。 它可以工作,所以它可能是$window。jquery在这里做什么 function (a, b) { var c = a('meta[name="csrf-token"]').attr("content"); }(jQuery) html: <meta content="authenticity_token" name="csrf-param" /> <meta content="/Zsc0Ma07P8gupCp2k3Iu

我发现了这个密码,我不明白a和b在哪里。 它可以工作,所以它可能是$window。jquery在这里做什么

function (a, b) {
    var c = a('meta[name="csrf-token"]').attr("content");
}(jQuery)
html:

  <meta content="authenticity_token" name="csrf-param" />
<meta content="/Zsc0Ma07P8gupCp2k3Iu77nTOQDStpt6bToOlVt/gc=" name="csrf-token" />

它只是将
a
定义为函数中
jQuery
的别名,将
b
定义为
未定义的别名

也许你会发现这更熟悉:

function ($, b) {
    var c = $('meta[name="csrf-token"]').attr("content");
}(jQuery)
未定义的
使用别名通常是为了缩短代码,以最小化带宽

function (a, b) {
    var c = a('meta[name="csrf-token"]').attr("content");
}(jQuery)// the function call is made here
提供的第一个参数是
jQuery
,它是一个大的
jQuery
对象,相当于
$
。在您的调用中,默认情况下,
a=jQuery
b=undefined
,因为它从未提供过

(function(a, b) {
    console.log(a); // 5
    console.log(b); // 3
})(5, 3);
正如@dystroy所指出的,这是一个较短的代码技巧,但它通常不用于缩短
未定义的
,这可以通过任何参数省略轻松获得。JavaScript通常会缩小,但缩小器无法缩小默认关键字,如
文档
窗口
。通过减小文件大小可以提高性能

更常见的情况是:

!function(w, d){
    w.onload = function() {
        var x = d.getElementById("whatever");
    };
}(window, document);
以上所有内容都应该是IIFEs,或者立即调用。使用括号或任何数学运算符强制计算为表达式

更新

将参数传递给函数

(function(a, b) { // here I am defining an anonymous function. It has no name
    console.log(a); // It takes two params, a and b.
    console.log(b);
})(5, 3); // Because of the () parentheses around it: (function(){})
// the function is evaluated as an expression. 
// because of the second group of params (5, 3) the function is called.
想象一下你正在这样做

function do(a, b) {
    // bla bla
};
do(5, 3);
将函数定义和函数调用粘合在一起,您可以得到:

(function(a, b) {})(5, 3);

当前
b
这就是为什么我使用未定义的b来最小化带宽?那么为什么jQuery会返回meta标记呢?是的,它是存在的:不为第二个参数传递一个值是导致b未定义的原因。我绝对不同意你的
惯例是普遍的。我甚至会说,很少有任何理由做出这样的更改,我将其归类为“过度优化”。我添加了html,您将拥有一个标记。我还是不明白为什么一个窗口是$window?@alex23 thx,谢谢你的解释。我理解你提到的。只有我的示例使用jqwery对象执行它这一事实。在这种情况下,不是$window。或者包含Jqwery对象?现在清楚了。对我来说,这意味着jquery包含一个=$windows right。