ES 6のlet命令は推測を実現する
2105 ワード
今日はチェン一峰の「ECMAScript 6入門」のletとconst命令を見て、letを見てから自分でテストして、まるで雲の中にいるようだ.コードは次のとおりです.
実行結果は次のとおりです.
結果から私は以下の法則をまとめた.
1.let変数は暗黙的に下層関数に伝達される.
2.関数は上位レベルからlet変数を受信すると、その変数を保存するための新しいメモリを開きます.
3.関数は上位から渡されたlet変数を処理した後、暗黙的に上位に戻り、上位のlet変数を更新します.
では、どのように実現すればいいのでしょうか.私はこう思っています.
1.各関数(最上位(関数)を含む)にletテーブルを設定します.
2.関数を定義するときにletテーブルのデータをコピーし、関数のletテーブルに追加し、ソースをマークします.
3.関数の実行が終了すると、letテーブルの上位から渡された変数を新しい値で上位のletテーブルに更新する
"use strict";
let o = {};
for (let i=0; i<10; i++) {
var j = i;
console.log('for before ... i: ' + j);
o[j] = function(){
i ++;
console.log('func one ... i: ' + i);
var f = function(){
i ++;
console.log('func two ... i: ' + i);
};
f();
};
o[j]();
console.log('for end ... i: ' + i);
console.log();
}
console.log('------------');
for (var key in o) {
var fn = o[key];
console.log('key: ' + key);
fn();
fn();
console.log();
}
実行結果は次のとおりです.
for before ... i: 0
func one ... i: 1
func two ... i: 2
for end ... i: 2
for before ... i: 3
func one ... i: 4
func two ... i: 5
for end ... i: 5
for before ... i: 6
func one ... i: 7
func two ... i: 8
for end ... i: 8
for before ... i: 9
func one ... i: 10
func two ... i: 11
for end ... i: 11
------------
key: 0
func one ... i: 3
func two ... i: 4
func one ... i: 5
func two ... i: 6
key: 3
func one ... i: 6
func two ... i: 7
func one ... i: 8
func two ... i: 9
key: 6
func one ... i: 9
func two ... i: 10
func one ... i: 11
func two ... i: 12
key: 9
func one ... i: 12
func two ... i: 13
func one ... i: 14
func two ... i: 15
結果から私は以下の法則をまとめた.
1.let変数は暗黙的に下層関数に伝達される.
2.関数は上位レベルからlet変数を受信すると、その変数を保存するための新しいメモリを開きます.
3.関数は上位から渡されたlet変数を処理した後、暗黙的に上位に戻り、上位のlet変数を更新します.
では、どのように実現すればいいのでしょうか.私はこう思っています.
1.各関数(最上位(関数)を含む)にletテーブルを設定します.
2.関数を定義するときにletテーブルのデータをコピーし、関数のletテーブルに追加し、ソースをマークします.
3.関数の実行が終了すると、letテーブルの上位から渡された変数を新しい値で上位のletテーブルに更新する