为什么此函数返回未定义?

时间:2019-07-16 17:05:42

标签: javascript spread

我想检查参数之一是否等于$('#KullaniciBtn').click(function () { var message = "@Html.Raw(ViewBag.message)"; alert (message); // More code here } 。 如果是这样,我想返回true,但我得到3。 这是为什么 ?

undefined

4 个答案:

答案 0 :(得分:2)

不同于for循环会创建一个新的作用域,但不会在单独的函数中执行,forEach在单独的函数中执行。也就是说,从forEach处理程序内部返回也不会从外部函数返回。

let x = () => {
  [1, 2, 3].forEach(v => {
    console.log(v); // 1 2 3
    return v;
  })
  return 0;
};
console.log(x()); // 0

let y = () => {
  for (let v = 1; v <=3; v++) {
    console.log(v); // 1
    return v;
  }
  return 0; // never reached
};
console.log(y()); // 1

答案 1 :(得分:2)

得到undefined的原因是因为函数isThree()没有返回任何内容。函数中的两个返回是从foreach()内部的匿名函数返回的。

我认为您的函数试图确定数组中是否存在值3。已经有一个功能:includes()。您的功能可能是:

function isThree(...args) {
  return args.includes(3);
};

console.log(isThree(1,2,3,4,5));

答案 2 :(得分:1)

您正在从forEach函数返回一个值,但这并不意味着您正在从isThree函数返回一个值。另外,请尝试使用filter函数来查找与您要查找的号码是否匹配的。

尝试一下:

function isThree(...args){
  return args.filter(val => {
    if(val === 3){
      return true;
    }
  }).length > 0;
};
console.log(isThree(1,2,3,4,5));

在前面的示例中,我使用filter返回满足条件的数组的每个实例(在本例中为val === 3)。返回true会将结果附加到一个空数组,因此该操作的响应将是一个数组,其中每个实例都满足条件。因此,通过将数组大小与> 0进行比较,我可以确定是否有任何元素符合条件。

您甚至可以使用简写args.filter(val => val === 3)来进一步简化该功能:

function isThree(args){
  return args.filter(val => val === 3).length > 0;
};

console.log(isThree(1,2,3,4,5));

或者,您可以使用原型函数some进一步简化操作,该函数检查数组中的任何元素是否满足条件:

function isThree(args){
  return args.some(val => val === 3);
};

console.log(isThree(1,2,3,4,5));

答案 3 :(得分:0)

问题出在这里else语句,因为如果找不到if statement,显然它会用到else statement,这是一个循环,因此需要修复该循环

for(let a = 0; 10 > a; ++a )
{
   if( a === 3) console.log('We\'re done'); // I expect only this not else statement

   else console.log('Not found');
}

输出:

"Not found"
"Not found"
"Not found"
"We're done"
"Not found"

在上面的示例中,很多时候我们都犯了这个错误,现在解决这个问题

for(let a = 0; 5 > a; ++a )
{
   if( a === 3) 
    {
      console.log('We\'re done');
      return true; // I expect only this not else statement
    }

}

 console.log('Not found');
 return false;

我希望它能给您一个有关如何解决循环中意外代码的想法;

总是很乐意为您提供帮助!