javascript:变量定义vs函数undefined

时间:2015-04-26 05:20:27

标签: javascript arrays

我有两个数组:

array1 = ["one", "two"];
array2 = ["two", "four"]; 

如果我写:

var inetersection = array1.filter(function(n){
    return array2.indexOf(n) != -1 
 });

我得到正确答案:“两个”。

但如果我写一个函数:

function intersection (array1, array2){
   array1.filter(function(n){
   return array2.indexOf(n) != -1
   });
}

然后console.log(intersection(array1, array2));返回undefined

第二种语法出了什么问题?

5 个答案:

答案 0 :(得分:5)

您的函数intersection不返回任何内容

只需在功能的第1行添加return

答案 1 :(得分:0)

交集函数没有return语句。 你需要这样做:

function intersection (array1, array2){
   return array1.filter(function(n){
      return array2.indexOf(n) != -1
   });
}

答案 2 :(得分:0)

您只需要在array.filter调用之前添加一个返回。

var array1 = ["one", "two"];
var array2 = ["two", "four"];

function intersection(array1, array2) {
  return array1.filter(function(n) {
    return array2.indexOf(n) != -1;
  });
}

console.log(intersection(array1, array2));

答案 3 :(得分:0)

您必须在array1.filter之前添加返回

function intersection (array1, array2){
   return array1.filter(function(n){
   return array2.indexOf(n) != -1
   });
}
  
    

注意:此方法是ECMA-262标准的JavaScript扩展;如     这样它可能不存在于标准的其他实现中。     要使其工作,您需要在您的顶部添加以下代码     脚本:

  
   if (!Array.prototype.filter) { 
  Array.prototype.filter = function(fun /*, thisp*/)   {
         var len = this.length;
         if (typeof fun != "function")
           throw new TypeError();

         var res = new Array();
         var thisp = arguments[1];
         for (var i = 0; i < len; i++)
         {
           if (i in this)
           {
             var val = this[i]; // in case fun mutates this
             if (fun.call(thisp, val, i, this))
               res.push(val);
           }
         }

         return res;   }; }

Javascript Array filter() Method

答案 4 :(得分:0)

您的功能不会返回任何内容。你是如何解决的:

function intersection (array1, array2){
   return array1.filter(function(n){
       return array2.indexOf(n) != -1
   });
}

为什么?

所以变量有一个值,让我们从这开始:

var hello_world = "Hello World!";

这样做是因为它将hello_world的值设置为"Hello World!"。这很简单。

<小时/>

解释!

现在让我们尝试一下这个功能。

function addNumbers (number_1, number_2) {
    number_1 + number_2;
}

现在让我们运行该功能

  

addNumbers(1, 2)   undefined

为什么我们得到undefined?让我们回到第一个示例,并在控制台中输入类似的内容

  

&GT; &#34; Hello World!&#34;

     

&#34; Hello World!&#34;

当我们输入字符串"Hello World!" 重新调整字符串时,会发生什么。此规则在JavaScript中预设,但是当您创建自己的函数时,它并不知道return原因是什么,让我们以jQuery为例。你可以这样做:

var elem = $("#element");

让我们看看第一部分。所以有一个名为$的函数,该函数可能正在做很多事情。首先,它使用id element获取元素。它将该元素存储在elem中。该功能可能会做很多事情,但它不是 returning 。返回一些东西是设置一个函数的值。以下是两个例子:

var function_1 = function () {
    alert("Hello!");
};

var function_2 = function () {
    return function () {
        alert("Hello");
    }
}

现在我在功能二中做了什么?这是

var variable_1 = function_1();
console.log(variable_1);
  

undefined

variable_1未定义,但仍然会发出警告。这是因为它运行了函数,但它返回undefined。所以variable_1不是一个功能;因为variable_1未定义。我们来看看function_2

var variable_2 = function_2();
console.log(variable_2);
function () {

   alert("Hello");

}
variable_2(); //Alerts "Hello!"

这也有点令人困惑,因为function_2 返回一个函数,它将variable_2设置为返回的函数。这就是为什么这样可行的原因。

希望有道理。 Here's a MDN page on return