2016-09-15 129 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裏面的功能。