javascript - 求指导这个while循环的结果
迷茫
迷茫 2017-04-10 18:00:56
[JavaScript讨论组]

代码是这个样子的

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 循环看不懂啊

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
ringa_lee
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;
})();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号