我的教授给了我们以下我们应该分析的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; }
。但是,我似乎无法理解为什么会这样。
有人可以帮我查看代码并解释发生了什么吗?
答案 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;
。因此,在我们的案例中,n
为15
,fiveMultiplyer(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不必调用其方法,只需将所需的变量传递给它,然后调用该方法并为您返回。
希望有所帮助。