看板 Ajax 關於我們 聯絡資訊
您可能對於js的function宣告方式沒有很清楚 但我想可能很多人也有不正確的認識 js的function宣告方式分為兩種 function declaration和function expressions 主要會因為hoisting 而有些微的不同 invoke的方式 大概分為四種 主要和this的binding有關 在這例子中 您的設計想法是完全可行且合理的 只是實做上要注意 首先如果你加了() 就是一種invocation 意思就是執行這function 所以應該寫成 $(selector).mousedown(function(){ if(using IE){ func1(); //invoke }else { func2(); //invoke } }); 如果你不直接invoke 應該用function expression 因為functon declaration絕不應出現在{}block中 在if中作function declaration 每個browser對這種錯誤會有不同的奇怪詮釋 (新的browser supports 所謂的 function statement) 再者也有可能因為hoisting而overwrite的問題產生 if(using IE){ var myHandler = func1; }else { var myHandler = func2; } $(selector).mousedown(myHandler); //function copying 有興趣可以參考這兩篇 http://kangax.github.com/nfe/ http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/ ※ 引述《coldollsheep (加油加油^^)》之銘言: : 不好意思 問一個比較粗淺的問題 : 我做了一個按鈕 點了會有聲音 : IE 跟其他瀏覽器是採用不同的方法 : 如以下程式碼 : 可以看到我毎次點擊都必須判斷一次 : //關鍵那顆鈕 : $('#click_btn').mousedown(function (ev) : { : //1.處理音效 : if ($.browser.msie) : { : document.getElementById("soundeffect").src=soundfile; : } else : { : var _audio2 = document.createElement('audio') ; : _audio2.src = soundfile ; : _audio2.play() : } : } : ---- : 有沒有辦法變成這樣 : func1() : { : 實際內容 : } : func2() : { : 實際內容 : } : //1.處理音效 : if ($.browser.msie) : { : playsound() = func1(); <------這裡就是關鍵 我不知道怎麼弄這裡 : 觀念不好不好意思 : } else : { : playsound() = func2(); : } : //關鍵那顆鈕 : $('#click_btn').mousedown(function (ev) : { : //1.處理音效 : playsound(); : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.104.219.9 ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:15) ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:22) ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:31) ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:31) ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:35) ※ 編輯: senser 來自: 71.104.219.9 (09/19 17:42)
ChowMein:我想 function declaration 和 expressions 的差異 09/19 19:47
ChowMein:不是原po問題的所在, func1 func2 已經在之前宣告了, 09/19 19:48
ChowMein:應該沒必要寫成這樣 09/19 19:49
senser:他會有這問題 我覺得他可能會對function不太清楚 09/20 12:15
senser:所以對ECMA應該應該要了解一下才是 09/20 12:17
senser:再者 js中應要盡量避免 function xx(){} 這種declaration 09/20 12:20
genomini:為什麼要盡量避免使用function xx(){} 這種declaration呢 09/20 12:55
musie:怕撞名吧... 09/20 15:27
ChowMein:原po的問題應該是不知道 function 也是個 object 09/20 18:40
ChowMein:所以不知道要用 playsound = func1; 09/20 18:41
senser:恩 可能他的問題沒這麼複雜 但我只是想釐清一些觀念 09/21 12:03
senser:而且他在裡面invoke playsound 其實會喪失context 09/21 12:05