V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Exceptionluo

对执行结果无法理解 ,求助~

  •  
  •   Exceptionluo · Apr 24, 2018 · 3852 views
    This topic created in 2925 days ago, the information mentioned may be changed or developed.
    var My = {}
    My.namespace = function (name) {
    
        var parts = name.split(',')
    
    
        var current = My;
    
        for (i in parts) {
            if (!current[parts[i]]) {
                current[parts[i]] = {}
                console.log(current, My, i, current === My)
            }
            current = current[parts[i]]
        }
        
    
    }
    
    My.namespace('dom,style')
    console.log(My)
    
    
    代码如上,对最终的执行结果无法理解
    为何 style:{}会挂载到 My 上面呢
    每次 current[parts[i]] = {}  执行后
    再执行 current = current[parts[i]]  
    current 被设置成{} 他又是如何与 My 保持关联的呢
    
    
    5 replies    2018-04-24 23:26:25 +08:00
    chenstack
        1
    chenstack  
       Apr 24, 2018
    不太理解所说的 style:{}挂载到 My 上面,第一次循环相当于 My.dom = {}; current = My.dom; 第二次循环相当于 My.dom.style = {};
    Exceptionluo
        2
    Exceptionluo  
    OP
       Apr 24, 2018
    @chenstack 为什么第二次循环相当于 My.dom.style = {};呢 就是这里不理解
    rabbbit
        3
    rabbbit  
       Apr 24, 2018
    第一次循环结束后
    current 指向 My["dom"],值是 {}
    nanyang24
        4
    nanyang24  
       Apr 24, 2018
    @Exceptionluo 第一次循环之后 `current = My.dom`。第二次循环:`current[parts[1]] = {}` 相当于 `My.dom.style = {}`
    Exceptionluo
        5
    Exceptionluo  
    OP
       Apr 24, 2018
    @rabbbit @chenstack 瞬间就懂啦 感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5635 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 07:58 · PVG 15:58 · LAX 00:58 · JFK 03:58
    ♥ Do have faith in what you're doing.