【发布时间】:2017-03-19 07:36:39
【问题描述】:
我是 Javascript 新手,所以请多多包涵。我写了一个函数,它返回数组中最高数和最低数之差:
// FUNCTION 1
function range (arr) {
var max = Math.max.apply(null, arr);
var min = Math.min.apply(null, arr);
var max_diff = max - min;
return max_diff;
}
console.log(range([6,2,3,4,9,6,1,0,5])); // 9
但是,在我想出这个解决方案之前,我尝试了另一种方法:
// FUNCTION 2
function range (arr) {
var max = function (arr) {
return Math.max.apply(null, arr);
}
var min = function (arr) {
return Math.min.apply(null, arr);
}
var max_diff = max - min;
return max_diff;
}
console.log(range([6,2,3,4,9,6,1,0,5])); // NaN
此函数返回“NaN”。我阅读了 NaN,但我仍然不清楚为什么我会得到“NaN”。
另一个奇怪的事情是:如果我把 FUNCTION 2 放在 FUNCTION 1 之前,第二个函数实际上返回了正确的结果 (9)。
什么?
【问题讨论】:
-
Ehm,您将两个函数相减。不是函数的结果。 Javascript 中的函数是一个对象,但它不是一个数字。
-
max 和 minimum 是函数,所以你应该使用 max() - min();
-
在一个简化的示例中,
42和function() { return 42; }是两个非常不同的值。您可以在此处阅读有关函数的教程:eloquentjavascript.net/03_functions.html。
标签: javascript function closures