Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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,我的问题基于以下场景 var test = (function(){ var SlideManager = !function(){ this.Sequencer = { getSequence : function()... } return this; }() var LayerManager = !function(){ this.Sequencer = {

我的问题基于以下场景

var test = (function(){

    var SlideManager = !function(){
        this.Sequencer = {
            getSequence : function()...
        }
        return this;
    }()

    var LayerManager = !function(){
        this.Sequencer = {
            getSequence : function()...
        }
    }()

    var module = {};
    module.foo = function(){}
    return module;
})()
作为说明,测试对象在其作用域中有两个辅助对象:SlideManager和LayerManager。这两种方法处理实体幻灯片和图层的不同操作。每个实体在DOM中都有自己的固定位置,应该通过
Sequencer
helper对象检索该位置

请注意,每个经理都应该有自己的
Sequencer
,我希望在提供的示例中也是如此

然而,我对js作用域的理解似乎有一个问题,因为两个管理器都有相同的
Sequencer
(来自层管理器的)

我应该期待这样的事情,还是我在代码的其他地方做错了什么


谢谢大家!

这两个管理者中的
不是该功能的本地部分,因此两者都是相同的,这就是为什么他们有相同的SQueuencer。

来解释斯科特·亨特所说的

仅仅自动执行函数(function(){})()并不会给它们一个新的作用域。因此,您需要“新”关键字

因此:


也许你要找的更多。。。另外,为什么在分配之前“!”敲打自动执行的函数返回。。。这将为您提供一个真/假布尔值?

“测试”不是对象。它是一个布尔常量(
true
false
,取决于匿名函数返回的内容)。发布您正在使用的实际代码可能更好。@Pointy:SlideManager和LayerManager也是如此。@ScottHunter是的,我同意-发布的代码没有意义。@Pointy好的,我应该明确声明代码示例是从现有工作环境中提取的,为了显示准确的代码,我省略了一些代码行问题然而,我在示例中添加了一些虚拟行,以便测试现在是一个对象:)@Ionut:并且除了您遇到的问题之外,您发布的代码是否正常工作?因为它看起来仍然存在Pointy和Scott提到的问题。
是我的错误。我道歉。感谢
新的
洞察:)
    var SlideManager = function(){
            this.Sequencer = {
                getSequence : function()...
            }
            return this;
        };

        var LayerManager = function(){
            this.Sequencer = {
                getSequence : function()...
            }
        };

var slideManagerInstance = new SlideManage();
var layerManagerInstance = new LayerManager();