2013-05-13 91 views
3

我发现了这个codesnipe,我不明白a和b在哪里给出。 它的工作原理,所以它可能是$窗口。 jquery在这里做什么?jquery函数(a,b)需要说明

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" /> 
+7

目前'B'是 – undefined 2013-05-13 10:39:27

回答

4
function (a, b) { 
    var c = a('meta[name="csrf-token"]').attr("content"); 
}(jQuery)// the function call is made here 

提供的第一个参数是jQuery,大jQuery物体,相当于$。在您的电话中,默认为a = jQueryb = undefined,因为它从未提供过。

(function(a, b) { 
    console.log(a); // 5 
    console.log(b); // 3 
})(5, 3); 

作为@dystroy指出,这是一个更短的码特技,但它通常不用于缩短undefined,它可以很容易地通过任何PARAM遗漏而获得。 JavaScript通常会缩小,但缩小器无法缩小默认关键字,如documentwindow。通过减小文件大小来提高性能。

一个更常见的情况是:

!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); 
+0

我加了html,你会有一个令牌。我仍然不明白为什么是$窗口? – hamburger 2013-05-13 11:00:37

+0

@ alex23 thx为您解释。我了解你的提及。只有我的示例使用jqwery-Object执行它。在这种情况下,a不是$窗口。还是包含Jqwery-Object? – hamburger 2013-05-13 11:15:13

+0

现在很清楚。这对我来说意味着jquery包含一个= $ windows的权利。 – hamburger 2013-05-13 15:57:00

4

它简单地a定义为函数内的jQuery的别名,b作为undefined的别名。

也许你会发现这个比较熟悉:

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

使用别名为undefined往往是做具有更短的代码,以尽量减少带宽。

+0

我为什么与具有不确定b减少带宽?为什么jQuery提供meta标签? – hamburger 2013-05-13 10:45:16

+1

是的,它是现在的:不传递第二个参数的值是什么使b不确定。我完全不同意你的'_'惯例是普遍的。我甚至会说,很少有任何理由做出这种改变,我把它归类为“过度优化”。 – 2013-05-13 11:02:44