作者jjjkkkooo (接科噎歐)
看板Ajax
標題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
1F:→ CaptainH:是變數名稱而已, 變數要自己傳進去 12/20 13:07
2F:→ CaptainH:像這樣: (function($){ ... })(jQuery); 12/20 13:08
3F:推 mrbigmouth:你前篇也寫了...下面的()其實是輸入(window) 12/20 13:19
4F:→ mrbigmouth:所以讓裡面用的window等於外面用的window 12/20 13:19
5F:→ mrbigmouth:undefined則不予傳值,確保undefined真的是undefined 12/20 13:20
6F:→ mrbigmouth:這樣只要裡面宣告window.$=? 外面的window.$也等於? 12/20 13:21
7F:推 s25g5d4:第五行寫錯了 括號位置不對 12/20 18:56
已修正,感謝指教!!
8F:推 s25g5d4:另外 js找變數時會從最接近的開始找 所以他先找到你傳入 12/20 19:00
9F:→ s25g5d4:的變數window 而你在變數window裏面存的是window物件 12/20 19:00
※ 編輯: jjjkkkooo 來自: 114.41.163.199 (12/20 19:04)