首页 > 求指导这个while循环的结果

求指导这个while循环的结果

代码是这个样子的

var STK = (function() {
    var that = {};
    var errorList = [];
    var ns='data1.data2.data3'

    that.register = function(ns, maker) {
        var NSList = ns.split('.');
        var step = that;
        var k = null;
        while (k = NSList.shift()) {
            if (NSList.length) {
                if (step[k] === undefined) {
                    step[k] = {};
                }
                step = step[k];
            } 
        }
    };
    that.register(ns);   
    // return that;
})();

怎么滴that 的结果就变成这样子了啊。。。这个while 循环看不懂啊


var STK = (function() {
    var that = {};
    var errorList = [];
    var ns = 'data1.data2.data3'

    that.register = function(ns, maker) {
        var NSList = ns.split('.');
        // NSList = ["data1", "data2", "data3"]
        var step = that;    // step 当前指向 that,也就是根 ns
        var k = null;       // k = NSList.shift() 表示每一层 ns 的名称
        while (k = NSList.shift()) {    // 每次循环判断如果 k 有值就进入循环体
            // shift 之后 NSList 是去掉第1个元素之后剩下的
            // 所以如果 NSList.length 为 0 (此时判为 false) 表示没其它元素了
            if (NSList.length) {
                // 只要还有元素,就将当前 ns 名称作为上个 ns 的属性,其值是 {}
                // 如果已经存在这个属性了就拉倒
                if (step[k] === undefined) {
                    step[k] = {};
                }
                // 改变 step 指向的 ns(相当于下移一层)
                step = step[k];
            }
            
            // 没有 else,所以最后一层名称被丢弃了
            // 估计是当类名之类的,不属于命名空间了
        }
        
        // 循环完了连起来就是
        // that.data1.data2
    };
    that.register(ns);
    // return that;
})();
【热门文章】
【热门文章】