Re: [問題] 根據 if 決定叫用哪一個function
您可能對於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)
推
09/19 19:47, , 1F
09/19 19:47, 1F
→
09/19 19:48, , 2F
09/19 19:48, 2F
→
09/19 19:49, , 3F
09/19 19:49, 3F
→
09/20 12:15, , 4F
09/20 12:15, 4F
→
09/20 12:17, , 5F
09/20 12:17, 5F
→
09/20 12:20, , 6F
09/20 12:20, 6F
推
09/20 12:55, , 7F
09/20 12:55, 7F
推
09/20 15:27, , 8F
09/20 15:27, 8F
推
09/20 18:40, , 9F
09/20 18:40, 9F
→
09/20 18:41, , 10F
09/20 18:41, 10F
→
09/21 12:03, , 11F
09/21 12:03, 11F
→
09/21 12:05, , 12F
09/21 12:05, 12F
討論串 (同標題文章)
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章