這是怎麼回事那裏是匿名函數function() { ... }
語法模糊一點點。你正在做的是傳遞一個函數,而不是調用它。我想解釋一下這是如何工作:
如果你有一個簡單的功能
function next() { return 5 };
它只是返回值5,如果你從什麼地方把它叫做:
a = next(); // value of a will be 5
但什麼你也可以這樣做,就是把整個功能傳遞給a
。這是可能的,因爲在JavaScript函數實際上是對象:
a = next;
b = a(); // value of b will be 5
如果你看一下語法,它會告訴你,這把括號()
在函數結束調用它,並返回返回值。而沒有括號的裸體字符串則會傳遞給函數本身。
那麼什麼是回調現在,click()
想要獲得什麼樣的參數?回調函數是一個函數,稍後調用;我們實際上把它交給了,以後再打電話。 click()
想要得到這樣一個函數作爲參數,現在應該清楚,我們必須通過沒有括號的函數,以使click()
稍後調用它,而不是僅僅傳遞一個5
。
$("#next").click(next);
那麼如何使用匿名函數的初始語法工作?
function() { next(); }
實際包裝您的next()
到另一個函數,這是匿名的 - 因爲它不會有一個名字 - 但正在以同樣的方式作爲命名功能。你甚至可以用它設置一個變量:
a = function() { next(); } // a will be the anonymous function that calls next()
但調用該函數a()
將返回任何結果,因爲匿名函數不返回一個值(要準確:在JavaScript中每個函數調用返回至少undefined
,但這是一個技術細節)。 它甚至可以立即通過把括號在它到底叫:
a = function() { return next(); }() // value of a will be 5
添加return
存在將確保的next()
返回值將通過匿名函數傳遞。
這應該清楚爲什麼
$("#next").click(function(){ next(); });
工作,爲什麼
$("#next").click(next());
不大,但
$("#next").click(next);
將是一個很好的解決方案。
通過在函數名稱後面加上括號來執行函數,並將函數的返回值指定爲回調函數而不是函數本身。 –