Re: [問題] js的function

看板Ajax作者 (接科噎歐)時間14年前 (2011/12/20 13:04), 編輯推噓3(306)
留言9則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

12/20 13:07, , 1F
是變數名稱而已, 變數要自己傳進去
12/20 13:07, 1F

12/20 13:08, , 2F
像這樣: (function($){ ... })(jQuery);
12/20 13:08, 2F

12/20 13:19, , 3F
你前篇也寫了...下面的()其實是輸入(window)
12/20 13:19, 3F

12/20 13:19, , 4F
所以讓裡面用的window等於外面用的window
12/20 13:19, 4F

12/20 13:20, , 5F
undefined則不予傳值,確保undefined真的是undefined
12/20 13:20, 5F

12/20 13:21, , 6F
這樣只要裡面宣告window.$=? 外面的window.$也等於?
12/20 13:21, 6F

12/20 18:56, , 7F
第五行寫錯了 括號位置不對
12/20 18:56, 7F
已修正,感謝指教!!

12/20 19:00, , 8F
另外 js找變數時會從最接近的開始找 所以他先找到你傳入
12/20 19:00, 8F

12/20 19:00, , 9F
的變數window 而你在變數window裏面存的是window物件
12/20 19:00, 9F
※ 編輯: jjjkkkooo 來自: 114.41.163.199 (12/20 19:04)
文章代碼(AID): #1Ey1TWdu (Ajax)
文章代碼(AID): #1Ey1TWdu (Ajax)