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();