ES6的let命令实现猜想

今天扣了看阮一峰底《ECMAScript
6合乎帮派》的let和const命令,看罢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表中