[英]Indexing JavaScript with anonymous function gives an error: "Undefined"
我的問題是檢索'A','B','C'或'D',如果我傳遞的字符串s的第一個字母屬於{a,e,i,o,u}或{b,c, d,f,g} 或 {h,j,k,l,m} 或其他剩余的,分別。 我試圖達到這樣的效果:
function getLetter(s){
let letter = 'ABCD'[findIndex(s[0])];
return letter;
}
function findIndex(t){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(t)/5);
//console.log(a);
if (a<3){
return a;
}
else{
return 3;
}
}
它奏效了。 但是當我嘗試使用匿名 function 減少行數時,我無法執行我的 function。 我知道我有一個愚蠢的錯誤,因為我是編程新手。 我的代碼有什么問題? 像這樣:
let getLetter = s =>'ABCD'[function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
}]
My output is: undefined
謝謝!
這是因為在您的原始代碼中您正在執行findIndex()
,但在您的第二個代碼中您只是使用匿名 function 本身作為索引,您沒有執行它。
let getLetter = s =>'ABCD'[function(){ var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5); console.log("anonymous function executed"); if (a<3){ return a; } else{ return 3; } }()] console.log(getLetter("a"));
在您的情況下,您只需編寫 function 定義。 要運行 function,您需要添加 ()。 所以只需在定義后添加()。
let getLetter = s =>'ABCD'[function(){ var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5); console.log("anonymous function executed"); if (a<3){ return a; } else{ return 3; } }()]; console.log(getLetter('a'));
在第一個示例中,您調用了findIndex
方法,但在第二個示例中,您只是定義了function
,而沒有調用它。
你必須解決它:
您在哪里定義和調用您的方法,例如您在此處嘗試執行的操作,請查看文檔。
let getLetter = s =>'ABCD'[(function(){ var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5); console.log("anonymous function executed"); if (a<3){ return a; } else{ return 3; } })()]; console.log(getLetter('e'))
findIndex
定義為單獨的function
:這使您的代碼更清晰。
let getLetter = s =>'ABCD'[_findIndex(s)]; let _findIndex = letter => { var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(letter[0])/5); console.log("anonymous function executed"); if (a<3){ return a; } else{ return 3; } }; console.log(getLetter('e'))
你只是傳遞了 function 的引用,你沒有執行它。 您可以在 function 結束后立即添加()
以像這樣運行它:
let getLetter = s =>'ABCD'[function(){ var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5); console.log("anonymous function executed"); if (a<3){ return a; } else{ return 3; } }()] console.log(getLetter('test'));
但我強烈建議不要這樣做,因為隨着時間的推移,它會更難閱讀、理解、維護和開發。 比減少代碼行更重要的是它是人類可讀的,就像Martin Fowler
說的那樣
任何傻瓜都可以編寫計算機可以理解的代碼。 優秀的程序員編寫人類可以理解的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.