我有一个名为 Range 的简单函数,它根据开始、步长和结束值创建一个整数数组...
function Range (start, end, step) {
// default step is 1..
if (step === undefined ) step = 1;
// creating an array...
var arr = [], index = 0;
while(start <= end) {
arr[index] = start ;
index += 1;
start += step;
}
// simple function expressions
var getAll = function () {
return arr ;
};
var getOne = function(n) {
return arr[n] ;
};
// returns a unnamed function ..
return function(i) {
if (i === undefined) { return getAll() ;}
else {return getOne(i); }
}; // not an iife
}
所以基本上Range是一个返回未命名函数的函数,该函数再次返回在函数Range中声明的命名函数表达式.. err .. 我不知道.. 类似的东西......
现在下面的代码...
var first10 = Range (1,10) ; // no new ..() here, so no instance should be created.. only Range is called..
var first10Odd = Range(1,20,2) ; // and Range is called again..
alert(first10); // alerts - function(i) { ... }
alert(first10Odd); // alerts- function(i) { ... }
alert(first10()) ; // alerts - 1,2,3,...10
alert(first10Odd()); // alerts - 1,3,5,...19
alert(first10(0)); // alerts - 1
alert(first10Odd(9)); // alerts- 19
为什么评论中指定的警报警报??...我认为Range只是一个函数,而不是对象构造函数,也没有创建实例...不应该尽快销毁函数的局部变量功能完成??还是我的逻辑错了??上面的代码发生了什么?谁能解释一下....
抱歉问这个愚蠢的问题..