了解Javascript的片段

时间:2011-02-28 06:15:17

标签: javascript

我的教授给了我们以下我们应该分析的Javascript片段:

function createMultiplyer(multiple) {
n = multiple;
return function(num) {
 return num * n;
 };
}

var fiveMultiplyer = createMultiplyer(15);
var x = fiveMultiplyer(10);
alert(x);
alert(fiveMultiplyer);

这段代码输出一个警告,其中包含文本“150”,然后是另一个警告,其中显示function(num) { return num * n; }。但是,我似乎无法理解为什么会这样。

有人可以帮我查看代码并解释发生了什么吗?

4 个答案:

答案 0 :(得分:2)

1 让我们考虑一下

var fiveMultiplyer = createMultiplyer(15);

之后,fiveMultiplyer变量将具有createMultiplyer函数的返回值(这就是函数的工作方式)。那个返回值是

function(num) {
  return num * n;
};

所以,代码与此类似(稍后约n

var fiveMultiplyer = function(num) {
  return num * n;
};

2 下一行是

var x = fiveMultiplyer(10);

这里我们只调用上面的函数。它还使用变量n:该变量在createMultiplyer函数中设置:n = multiple;。因此,在我们的案例中,n15fiveMultiplyer(10)等同于10 * 15

这就是全部。希望它有所帮助。

修改
我还要注意n是一个全局变量,它的声明方式。因此,您可以从代码中的任何位置访问它。

答案 1 :(得分:0)

var fiveMultiplyer = createMultiplyer(15); // Create a function that multiplies with 15

此功能在本地称为fiveMultiplier

var x = fiveMultiplyer(10); // Invoke the multiply-by-15 with argument 10

结果在本地称为x

alert(x); // 150
alert(fiveMultiplyer); // The definition of multiply-by-15 as 
                       // it is returned from createMultiplyer

function createMultiplyer(multiple) { // Returns a new function which 
                                      // multiplies with "multiple"
 [var] n = multiple; // Note: "var" should have been used to keep "n"
                     // in scope (within "createMultiplyer").
 return function(num) { // Return definition of multiplier function
  return num * n; // "num" = arg. when invoked, "n" = multiplier at 
                  // define time (when "createMultiplyer" was called)
  };
}

答案 2 :(得分:0)

在JavaScript中,您可以拥有一个充当函数的变量。

var fiveMultiplyer = createMultiplyer(15); 
    You are calling a CreateMultiplyer(15) function. 
    This function returns you another function and that is associated 
    with the fiveMultiplyer var.
var x = fiveMultiplyer(10);
    You are actually invoking the function which was returned in previous step. 
    hence evaluating the value to 10 * 15 = 150
alert(x);
   As explained this returns 150
alert(fiveMultiplyer);
   As explained this returns the complete function 
   returned by createMultiplyer().

答案 3 :(得分:0)

考虑它的最佳方式是作为一个类或对象。 var fiveMultiplyer正在创建一个包含值n = 15的对象,并且具有一个接受数字并将其乘以n的函数。

在Java中,这看起来像这样

public class Multiplyer {
  private int n;

  public Multiplyer(int n) {
    this->n = n;
  }

  public int multiple (int m) {
    return n*m;
  }
}

Multiplyer myMultiplyer = new Multiplyer(15);

System.out.println( myMultiplyer.multiple(10) );

在JavaScript中,变量fiveMultiplye不必调用其方法,只需将所需的变量传递给它,然后调用该方法并为您返回。

希望有所帮助。