※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2012-10-11 04:25:53
看板 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原始碼裡的
外部又是怎麼拿到像jQuery裡定義的變數像$, jQuery?
另外jQuery原始碼裡的
(function( window, undefined ) {
})();
window與undefined這二個參數倒底是指真正的window物件與undefined
或只是function裡頭的變數名稱而已?
還請各位先進解惑,感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.163.199
→ :是變數名稱而已, 變數要自己傳進去1F 12/20 13:07
→ :像這樣: (function($){ ... })(jQuery);
→ :像這樣: (function($){ ... })(jQuery);
推 :你前篇也寫了...下面的()其實是輸入(window)3F 12/20 13:19
→ :所以讓裡面用的window等於外面用的window
→ :undefined則不予傳值,確保undefined真的是undefined
→ :這樣只要裡面宣告window.$=? 外面的window.$也等於?
→ :所以讓裡面用的window等於外面用的window
→ :undefined則不予傳值,確保undefined真的是undefined
→ :這樣只要裡面宣告window.$=? 外面的window.$也等於?
推 :第五行寫錯了 括號位置不對7F 12/20 18:56
已修正,感謝指教!!推 :另外 js找變數時會從最接近的開始找 所以他先找到你傳入8F 12/20 19:00
→ :的變數window 而你在變數window裏面存的是window物件
※ 編輯: jjjkkkooo 來自: 114.41.163.199 (12/20 19:04)→ :的變數window 而你在變數window裏面存的是window物件
--
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 172
回列表(←)
分享