顯示廣告
隱藏 ✕
※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2012-10-11 04:25:53
看板 Ajax
作者 jjjkkkooo (接科噎歐)
標題 Re: [問題] js的function
時間 Tue Dec 20 13:04:30 2011


※ 引述《jjjkkkooo (接科噎歐)》之銘言:
: 大家好,在下正在學習js與jQuery,是新手,不過有寫過
: flash的AS與php,js的感覺很像flash以前的AS2,還算蠻好上手的
: 但一直有個東西不懂為什麼要這樣寫,像jQuery原始碼裡
: 以及其它範例常出現下面的語法:
: (function(){
: })();
: 一般function是這樣寫
: function(){
: }
: 外層又包了括弧實在不懂這到底是什麼函義,是否能指點一二?感激不盡!

做了點功課,讀了O'Reilly的書有點頭緒,嚐試來自問自答一下

還請板上先進指正!

關於下列語法:

(function(){

})();

先從一般的function分析起,是function必然可以被執行

若是非匿名則可以這樣呼叫:
function func(){
}
func();


而匿名的function則沒有function name,如下:
function(){
}

要如何執行此function?那就是將宣告的這function包起來

(function(){
})

就可以把上面語法當成是個拿得到的function而不只是宣告出來的function

把上面那一包當成是func,因此要執行func就是執行此匿名函式,因此

func();即

(function(){
})();

也就是板友推文提到立即執行此function


==============================================================

現在在下又衍生一些問題...就是即然是匿名的function

外部又是怎麼拿到像jQuery裡定義的變數像$, jQuery?

另外jQuery原始碼裡的


(function( window, undefined ) {

})();

window與undefined這二個參數倒底是指真正的window物件與undefined

或只是function裡頭的變數名稱而已?

還請各位先進解惑,感激不盡!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.163.199
CaptainH:是變數名稱而已, 變數要自己傳進去1F 12/20 13:07
CaptainH:像這樣:  (function($){ ... })(jQuery);
mrbigmouth:你前篇也寫了...下面的()其實是輸入(window)3F 12/20 13:19
mrbigmouth:所以讓裡面用的window等於外面用的window
mrbigmouth:undefined則不予傳值,確保undefined真的是undefined
mrbigmouth:這樣只要裡面宣告window.$=? 外面的window.$也等於?
s25g5d4:第五行寫錯了 括號位置不對7F 12/20 18:56
已修正,感謝指教!!
s25g5d4:另外 js找變數時會從最接近的開始找 所以他先找到你傳入8F 12/20 19:00
s25g5d4:的變數window 而你在變數window裏面存的是window物件
※ 編輯: jjjkkkooo       來自: 114.41.163.199       (12/20 19:04)

--
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 172 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇