2016-09-15 133 views
0

以下是我想要做的过于简化的示例。目前,我有这样的事情:Javascript引用变量超出范围

function foo(arg1, arg2) { 
    var obj ={ 
     render:[arg1] 
    }; 
    obj.render.forEach(function(theArg) { 
     console.log(theArg) 
    }); 
} 
foo('one','two'); 
//Displays 'one' 

我希望能够修改“OBJ”外,并添加“ARG2”(或者说是内部函数foo范围的其他变量)的obj.render阵列。因此,像这样:

var obj ={ 
    render:[arg1] 
}; 
function foo(arg1, arg2) { 
    obj.render.forEach(function(theArg) { 
     console.log(theArg) 
    }); 
} 
function setup() { 
    obj.render.push(arg2); 
} 
setup(); 
foo('one','two'); 
//Need to display 'one' and 'two' in console 

的设置功能,代表额外的脚本,可能会或可能不存在,他们需要修改的对象“OBJ”。不幸的是arg1和arg2超出了范围,所以这段代码不会运行。任何想法我可以做到这一点?

+1

添加第三个参数,使用'obj'函数?它就像'function foo(arg1,arg2,obj)',并且只是通过'obj'作为第三个...顺便说一下你的问题还不太清楚,或许给出了更多的上下文,就像显示函数是如何所谓的可以给你更好,更合适的答案。 – ppeterka

+2

你是什么意思“*我想修改'obj'external *”?在你显示的示例代码中,没有理由不像你的第一个代码片段那样将声明放在'foo'函数中。请将您想要使用的其他代码添加到'obj'中,并向我们展示您如何/在哪里调用'foo'。 – Bergi

+0

你能描述一下你的用例吗?或者用实际的函数调用显示代码的一部分? – Ma3x

回答

0

改变你的函数签名,包括通过render财产obj

function foo(arg1, arg2)

function foo(obj)

那么你的函数循环中像你了。

obj.render.forEach(function(theArg)

0

全球声明您的变量obj

然后,你的函数也有obj以上的参数。

做你需要做的与obj里面的功能。