使用匿名函数索引 JavaScript 会给出一个错误:"Undefined"



我的问题是,如果我传递的字符串s的第一个字母分别属于{A,e,i,o,u}或{B,C,D,f,g}或{h,j,k,l,m}或其他剩余字母,则检索'A','B','C'或'D'。我正在努力实现同样的目标:

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;
}
}

它奏效了。但是,当我试图使用匿名函数来减少行数时,我无法执行我的函数。我知道我有一个愚蠢的错误,因为我刚开始编程。我的代码出了什么问题?像这样的东西:

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,而没有调用它。

你必须解决它:

  1. 使用IIFE(立即调用函数表达式(:

在定义和调用方法的地方,比如在这里尝试做什么,请查看文档。

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'))

  1. 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'))

这是因为在您的原始代码中,您正在执行findIndex(),但在您的第二个代码中,只是使用匿名函数本身作为索引,而不是执行它

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"));

在您的情况下,您只编写函数defition。要运行需要添加((的函数。所以只需在辩护后加上((。

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'));

你只是传递了函数的引用,你没有执行它。你可以在函数结束后立即添加()来运行它,如下所示:

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说的

任何傻瓜都可以编写计算机能够理解的代码。优秀的程序员编写人类能够理解的代码。

相关内容

  • 没有找到相关文章

最新更新