亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為何要return cur?跟蹤的結果只是一個沒有內容的object?

為何要return cur?跟蹤的結果只是一個沒有內容的object?

慕標琳琳 2023-04-15 17:13:29
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]] || {};這兩部分如何執行。
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

function ns(namespace) {//假設傳進一個包名:willerce.module.music
        var _ns = namespace.split(".");//將包使用.分割為一個數組
        var cur = window[_ns[0]];//window[_ns[0]]在這里就是 window.willerce ,獲取 window.willerce 的值        if(cur === undefined) cur = window[_ns[0]] = {};//如果window.willerce 不存在,賦值一個空對象
        var len = _ns.length;//得到包的長度,就是數組有多長        for(var i = 1; i < len; i++)//循環賦值
            cur = cur[_ns[i]] = cur[_ns[i]] || {};//如果這個對象為undefined,就創建一個空對象        //上面這個循環,大概就是判斷 willerce.module 是否存在,不存在,賦值為空對象 {},然后將自己cur賦值為willerce.module        //接著再判斷willerce.module.music,同理,不存在就初始化。將 cur 賦值為 cur,這時 cur 就是  willerce.module.music 了        //最后返回cur

          

        return cur;
    }

這里的命名空間,其實就是一個對象。例如 willerce.module.music 這3段都是對象

我們在給 music 賦值的時候,必須保證 willerce , willerce.module 都是一個對象(包含空對象),而不是 undefined。如果是 undefined,就要賦值為 {}

所以這段代碼的過程就是,判斷對象是否初始化了,如果沒,就始化為空對象。
看懂這段代碼,主要就是注意 cur 的變化。還有 undefined || {} 的意思是:如果第一個為undefined,就取第二個。


查看完整回答
反對 回復 2023-04-18
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號