Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript范围混淆_Javascript_Scope - Fatal编程技术网

JavaScript范围混淆

JavaScript范围混淆,javascript,scope,Javascript,Scope,我对小报的定义如下: MyApp.TabList = function (selector) { var private = { $list: $(selector), tabs: [] }; this.add = function (tab) { private.tabs.push(tab); }; }; 但是,当我调用this并打断this.add的主体时,private不会出现在本地范围中: MyApp.

我对小报的定义如下:

MyApp.TabList = function (selector) {

    var private = {
        $list: $(selector),
        tabs: []
    };

    this.add = function (tab) {
        private.tabs.push(tab);
    };
};
但是,当我调用this并打断
this.add
的主体时,
private
不会出现在本地范围中:

MyApp.tabs = new MyApp.TabList("#tabs");

$("#tab-add").click(function() {
    MyApp.tabs.add(new MyApp.Tab("title"));
});
private
是否不保留在对象内部

如果这段代码像上面那样独立运行,我可能会错过一些东西——为了演示的目的,我尽可能简单地使用它。

由于closure属性,该变量在add()函数中肯定是可用的


这可能不是答案,但
private
是一个Javascript关键字。您应该尽量避免使用它作为变量的名称。它会导致出现未知的bug,有时调试器也帮不上忙。试一试,让我们知道它是否有效

@Agile通常您希望以
结束构造函数,并返回此值。我不认为这有什么区别,但这是一个很好的实践(据我所知)。@Agile
private
变量不应该在
add
函数的局部范围内-它在它的外部范围内(TabList
构造函数的范围)。@Šime Vidas:?你为什么要那样做?如果您使用的是
new
,则永远不需要这样做。只有在不使用
new
关键字的情况下,您才能这样做。@克里斯,我以为我听到了这个建议,但我不再那么肯定了。:)@AgilemeansdoasLittle我必须说,你为评论回复选择了一个非常不幸的名字。您是否收到关于“@Agile”的通知?将“private”更改为下划线字符,问题仍然存在:(