V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
abcbuzhiming
V2EX  ›  JavaScript

外部对象,进入函数后对其添加属性后,离开函数后,用调试器看不到这些添加的属性?

  •  
  •   abcbuzhiming · 2022-07-28 11:14:13 +08:00 · 1495 次点击
    这是一个创建于 842 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function test(obj){
    obj.c = 'c';
    }
    var obj = {};
    test(obj);
    obj.a = 'a';
    obj.b = 'b';
    console.log(obj);


    在 chrome 调试器里,打断点在 console.log(obj) ; ,然后鼠标移动到 obj 上,会看到弹出窗口里,你会发现只能看到 obj.a 和 obj.b ; obj.c 是看不到的,但是,代码可以用,console.log 也能打印出来.

    实际的例子比这个复杂,但是简化后就是我上面的问题:为什么函数内给 obj 添加的属性,调试器在函数外看不见.
    6 条回复    2022-07-30 14:25:33 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2022-07-28 11:18:30 +08:00
    autumn426
        2
    autumn426  
       2022-07-28 11:37:39 +08:00 via Android
    变量的作用域吧
    heishu
        3
    heishu  
       2022-07-28 17:52:54 +08:00
    把你例子直接在浏览器控制台中执行是可以看到 c 的,正常来说是可以看到这些添加属性的,莫不是你实际用的地方深克隆过?
    laolaowang
        4
    laolaowang  
       2022-07-29 11:28:08 +08:00
    这不是能看到么?
    abcbuzhiming
        5
    abcbuzhiming  
    OP
       2022-07-29 19:26:50 +08:00
    @heishu 我有点搞不懂了,我写的代码是我简化后的,实际的代码比这多的多,但是看来看去,函数里也仅仅是给予新属性而已。你说的深克隆是什么意思?


    @laolaowang 简化后的代码可以看到,但是原始代码确实看不到
    codehz
        6
    codehz  
       2022-07-30 14:25:33 +08:00 via iPhone
    @abcbuzhiming console.log 不是实时评估的,log 当时没有的话就没了(但是点击展开按钮时又是实时的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:55 · PVG 13:55 · LAX 21:55 · JFK 00:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.