開始値、ステップ値、終了値に基づいて整数の配列を作成する 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で宣言された名前付き関数式を再び返します..エラー..わかりません..そのようなもの...
今、以下のコード...
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は単なる関数であり、オブジェクトコンストラクターではなく、インスタンスも作成されていないと思います...関数のローカル変数はすぐに破棄されるべきではありません機能が完成しました?? それとも私の論理が間違っていますか?? 上記のコードで何が起こっているのですか?? 誰か説明してくれませんか....
この愚かな質問をして申し訳ありません..