我发现了这个代码,但我不明白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" />
答案 0 :(得分:4)
它只是将a
定义为函数内jQuery
的别名,b
作为undefined
的别名。
也许你会发现这更熟悉:
function ($, b) {
var c = $('meta[name="csrf-token"]').attr("content");
}(jQuery)
通常使用undefined
的别名来缩短代码,以最大限度地减少带宽。
答案 1 :(得分:4)
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所指出的,这是一个较短的代码技巧,但它通常不用于缩短undefined
,这可以通过任何参数遗漏轻松获得。 JavaScript经常被缩小,但缩小器无法缩小默认关键字,例如document
或window
。通过减小文件大小来提高性能。
更常见的情况是:
!function(w, d){
w.onload = function() {
var x = d.getElementById("whatever");
};
}(window, document);
以上所有内容应为IIFE,或立即调用。使用括号或任何数学运算符强制将评估作为表达式。
<强>更新强>
将参数传递给函数。
(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);