为何要return cur?跟踪的结果只是一个没有内容的object?

function ns(namespace) {        var _ns = namespace.split(".");        var cur = window[_ns[0]];        if(cur === undefined) cur = window[_ns[0]] = {};        var len = _ns.length;        for(var i = 1; i < len; i++)
            cur = cur[_ns[i]] = cur[_ns[i]] || {};        return cur;
    }

这段代码中 cur = cur[_ns[i]] = cur[_ns[i]] || {}; 是什么作用?如何执行?不是很理解cur[_ns[i]] = cur[_ns[i]] 和= cur[_ns[i]] || {};这两部分如何执行。


慕标琳琳
浏览 124回答 1
1回答

跃然一笑

function&nbsp;ns(namespace)&nbsp;{//假设传进一个包名:willerce.module.music &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_ns&nbsp;=&nbsp;namespace.split(".");//将包使用.分割为一个数组 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cur&nbsp;=&nbsp;window[_ns[0]];//window[_ns[0]]在这里就是&nbsp;window.willerce&nbsp;,获取&nbsp;window.willerce&nbsp;的值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cur&nbsp;===&nbsp;undefined)&nbsp;cur&nbsp;=&nbsp;window[_ns[0]]&nbsp;=&nbsp;{};//如果window.willerce&nbsp;不存在,赋值一个空对象 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;len&nbsp;=&nbsp;_ns.length;//得到包的长度,就是数组有多长&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<&nbsp;len;&nbsp;i++)//循环赋值 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur&nbsp;=&nbsp;cur[_ns[i]]&nbsp;=&nbsp;cur[_ns[i]]&nbsp;||&nbsp;{};//如果这个对象为undefined,就创建一个空对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上面这个循环,大概就是判断&nbsp;willerce.module&nbsp;是否存在,不存在,赋值为空对象&nbsp;{},然后将自己cur赋值为willerce.module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接着再判断willerce.module.music,同理,不存在就初始化。将&nbsp;cur&nbsp;赋值为&nbsp;cur,这时&nbsp;cur&nbsp;就是&nbsp;&nbsp;willerce.module.music&nbsp;了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//最后返回cur &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cur; &nbsp;&nbsp;&nbsp;&nbsp;}这里的命名空间,其实就是一个对象。例如 willerce.module.music 这3段都是对象我们在给 music 赋值的时候,必须保证 willerce , willerce.module 都是一个对象(包含空对象),而不是 undefined。如果是 undefined,就要赋值为 {}所以这段代码的过程就是,判断对象是否初始化了,如果没,就始化为空对象。看懂这段代码,主要就是注意 cur 的变化。还有 undefined || {} 的意思是:如果第一个为undefined,就取第二个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript