有人可以向我解釋這在JavaScript中做了什麼?在javascript中全局導入
(function (x,y){}(x,y));
或本
// global import
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
我從來沒有見過像Java或C++
有人可以向我解釋這在JavaScript中做了什麼?在javascript中全局導入
(function (x,y){}(x,y));
或本
// global import
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
我從來沒有見過像Java或C++
function(x, y) { }
是anonoymous功能的其它語言類似的東西。
(x, y)
調用該函數,傳遞x
和y
作爲參數。
第二碼塊的目的是使jQuery
可作爲$
(不限定$
全局)和在局部範圍內導入YAHOO
使可變查找快一點。
除此之外,它創建一個新的作用域,所以任何用var
定義的變量將不會是全局的。
通常以這種方式使用第一個代碼塊來創建新變量,例如,當你在一個循環,需要創建一個變量,回調當前i
值:
for(var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
alert("number " + i);
}, 1000 * i);
})(i);
}
如果沒有新的領域你有相同i
每次從而警報「10號」 10倍。
第一個調用一個匿名函數,該函數接受2個參數,並且不執行任何操作,其中x
和y
作爲參數。
第二個做同樣的事情。它使用$作爲第一個參數名稱,並傳遞jQuery作爲參數值。因此可以在此函數內使用$
來引用jQuery
對象。這是一種將變量別名變爲另一個名稱的方法。
C#有一個類似的概念,稱爲Lambda表達式。
public static Func<int> Foo()
{
int a = 1,
b = 2;
return() => a + b;
}
它是一個通用的,一流的功能(通過一流的功能,它是指函數本身將返回,而不是其結果)是匿名聲明。
在這種情況下,我還會告訴你所謂的閉包 - 返回的方法包含'局部'變量a和b,允許它們在Foo超出範圍時持續存在。在許多語言中,匿名方法實施閉包。
匿名方法真的是太酷 - 您可以執行的行爲注入,在這個基準測試方法:
public static TimeSpan BenchmarkMe(Action timeThis)
{
Stopwatch sw = Stopwatch.StartNew()
timeThis();
sw.Stop;
return sw.Elapsed;
}
你可以傳遞一個匿名函數返回一個時間跨度爲這種方法,這將爲執行基準一次反對它。漂亮,呃?