为什么要在JavaScript中创建新函数

时间:2014-03-25 11:02:02

标签: javascript arrays function

我正在通过Code School上的JavaScript公路旅行,我发现它非常有用,似乎让学习JavaScript真的很棒,对我来说更有意义。在此之前,我已经尝试了几本书而没有太多运气。

无论如何,关于这个问题;请考虑以下

var fruits = ["Apple", "Orange", "Pineapple", "Cranbery", "Pomegranate" ];
var fruitJuice = fruits.map(function (fruit) {return "\n" + fruit + " juice";});
alert(fruitJuice);

为什么要创建一个名为' fruit'对于地图功能。我一直在玩jsfiddle,我可以用原来的水果'数组而不更改它的内容。

例如:

var fruits = ["Apple", "Orange", "Pineapple", "Cranbery", "Pomegranate" ];
var fruitJuice = fruits.map(function (fruits) {return "\n" + fruits + " juice";});
alert(fruitJuice);

也可以正常工作,但在开始时使用相同的水果变量。

这是最佳做法还是我错过了重要的事情?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

var fruitJuice = fruits.map(function (fruit) {return "\n" + fruit + " juice";});

这是一个回调,一个你显然不熟悉的概念。 map的作用基本上是这个(简化说明):

var result = [];
for (var i = 0; i < fruits.length; i++) {
    result.push(callback(fruits[i]));
}
return result;

map获取fruits数组中的每个项目,将其传递给提供的callback函数并获取该函数返回的任何内容。所以你的回调函数是:

function (fruit) {return "\n" + fruit + " juice";}

fruit这是函数的参数,即fruits[i]。如果要引用它,您需要以某种方式命名参数。当然,您仍然可以访问函数内部范围内的任何其他变量,但fruit是由map传递给它的唯一数组元素。

答案 1 :(得分:1)

创建一个新的变量fruit会在函数本身内实例化变量。 让我们假设你通过警告hello + name来呼叫一个名字。 你可以这样做:

var Name = 'bob';
alert('hello ' + Name);

但是我们也可以这样做,这也使得它可以在以后的代码中使用它与其他名称。

function sayHello(Name) { alert("Hello " + Name); }

var Name = 'Bob';
var Name2 = 'John';

sayHello(Name);
sayHello(Name2);
sayHello('Jack');

这应该返回3个警报,一个是Hello Bob,另一个是Hello John和Hello Jack。 使用您的函数,您可以使用函数内部的变量值但不在函数内部调用它来执行相同的操作。

使用.map函数,它将所有值从数组中取出并放入函数中。所以我也可以这样做。

var Names = ['Bob', 'John', 'Jack'];

Names.map(sayHello(Names));

这以几乎相同的方式打印名称,在函数内使用name作为回调变量。所以这打印:Hello Bob,John,Jack。

答案 2 :(得分:0)

map2方法(作为原始地图方法)创建一个新数组,并且(如deceze所说)需要一个参数。
如果您查看控制台,您将发现此方法的工作原理

   Array.prototype.map2=function(callback){
        var result=[]
        console.log(this)
        console.log(callback)
        console.log(callback(this[0]))
        result.push(callback(this[0]))
        for (var i = 0; i < this.length; i++) {
            result.push(callback(this[i]));
        } 
        return result 
   }
  var arr=["Apple", "Orange", "Pineapple", "Cranbery" ]
  console.log(arr.map2(function(a){return "a " + a + " juice"}))
  /*console.log(["Apple", "Orange", "Pineapple", "Cranbery" ].map2(function(b){return 'big'+b}))*/