一:函數格式和用法:
jQuery中所用到的:匿名函數的執行。
(function(){ //這里忽略jQuery所有實現 })();
//the first function function first(){ // code to process } //the second function function second(x,y){ return x+y; }
但是,無論你怎么去定義你的函數,JS解釋器都會把它翻譯成一個Function對象。
用Function對象定義函數
var abc = new Function("x","y","return x*y;");
關於匿名函數,顧名思義就是沒有函數名。那么怎么調用呢:
我們可以給他一個名字,
var abc=function(x,y){ return x+y; } //alert(abc(2,3)); // "5"
或者:
(function(x,y){ return x+y; })();
關於閉包:
閉包是指某種程序語言中的代碼塊允許一級函數存在並且在一級函數中所定義的自由變量能不被釋放,直到一級函數被釋放前,一級函數外也能應用這些未釋放的自由變量。
閉包,其實是一種語言特性,它是指的是程序設計語言中,允許將函數看作對象,然后能像在對象中的操作搬在函數中定義實例(局部)變量,而這些變量能在函數中保存到函數的實例對象銷毀為止,其它代碼塊能通過某種方式獲取這些實例(局部)變量的值並進行應用擴展。
var abc=function(y){ var x=y;// 這個是局部變量 return function(){ alert(x++);// 就是這里調用了閉包特性中的一級函數局部變量的x,並對它進行操作 alert(y--);// 引用的參數變量也是自由變量 }}(5);// 初始化 abc();// "5" "5" abc();// "6" "4" abc();// "7" "3" alert(x);// 報錯!“x”未定義!
var abc=function(y){ var x=y;// 這個是局部變量 return function(){ alert(x++);// 就是這里調用了閉包特性中的一級函數局部變量的x,並對它進行操作 alert(y--);// 引用的參數變量也是自由變量 }}(5);// 初始化 abc();// "5" "5" abc();// "6" "4" abc();// "7" "3" alert(x);// 報錯!“x”未定義!
那么關於第一個函數,jQuery的匿名函數,怎么解釋呢。。
是否應用了閉包特性,必須確定該段代碼有沒有 最重要的要素:未銷毀的局部變量。那么很顯然,沒有任何實現的匿名函數不可能應用了閉包特性。但如果匿名函數里面有實現呢?那也還得確定它的實現中有沒有 用到那些未銷毀的局部變量。所以如果問你那個開篇中的jQuery代碼片段是應用了JS里的什么特性?那么它只是匿名函數與匿名函數的調用而已。但是,它 隱含了閉包的特性,並且隨時可以實現閉包應用。
二:jQuery中一些函數的寫法:
(1)
$(function(){ //---- })
上面這個函數是$(document).ready(function(){}) 的簡寫,用來在DOM加載完成之后執行一系列預先定義好的函數。