2014-05-19 40 views
-1

我在Max/MSP的編程環境中使用Javascript。如果你感興趣,這裏有一個basic overview它在Max中的實現。那裏沒什麼特別的。只有一些自定義功能/方法可用。如何用我的變量和/或函數解決範圍問題?

所以我對這裏的術語並不完全確定。我有這樣的:var velData = MultiDimensionalArray(8, 16)全局聲明,這在下面的函數中提到。

這是一個全局變量嗎?既然它調用一個函數MultiDimensionalArray,那麼這是否使得velData成爲函數表達式?無論哪種方式,我無法從我的函數外部訪問的變量:

function list(y) { 
    if (inlet == 1) { 

     y = arrayfromargs(messagename,arguments); 

     for (var i = 0; i < y.length; i++) { 
      velData[row][i] = y; 
     } 
    } 

} 

post(velData[0][0]); 
post(); 

post()是CONSOLE.LOG等價和post(velData[0][0])作品時,它的功能內而不是在它之外。我認爲,因爲velData是全局聲明的,我應該可以在函數之外訪問它,但是我不能。

這裏是的jsfiddle代碼 - http://jsfiddle.net/estevancarlos/WHc5j/

建議?

+0

帶上調試器並遍歷代碼中的每一行? – zerkms

+1

JavaScript被設計爲「託管」(因爲它是「最大」),因此提供了很大的自由度來使得語言在特定行爲所以我們(我們這些不熟悉Max嵌入的人)不能說出當你說velData是「全局聲明的」時發生了什麼事情。這是什麼意思,在上下文中?你能提供更多的細節嗎? –

+1

請在代碼中聲明變量並分配調用表達式MultiDimensionalArray(8,16)'的結果。另外,在哪裏調用list()? – Bergi

回答

3

「所以我不能完全肯定我的術語在這裏我有這樣的:var velData = MultiDimensionalArray(8, 16)全局聲明,這在下面的功能提到它是一個全局變量。?」

velData變量只在全局聲明,如果它不在一些其他函數內。


「因爲它是調用一個函數,MultiDimensionalArray,這是否讓velData函數表達式?

沒有,函數表達式無關與函數的調用。它與創建函數的方式有關,除了與您的問題無關的一個或兩個狹窄問題外,這對其調用沒有影響。


「無論哪種方式,我無法從我的功能外循環訪問變量:

然後變量要麼是不是全球性的,或者正在在循環運行後的某個時候創建​​/初始化。


post()是相當於console.logpost(velData[0][0])作品時,它的內部功能,但沒有外面的它。「

然後又好像它被放置在該功能使得它的工作正在某個時候調用velData初始化後,而如果你不把它裏面的功能,它立即之前調用velData被初始化。


「我想,既然velData全局聲明,我應該能夠訪問它的功能之外,但我不能。建議?」

如果確實是全球性的,那麼它聽起來像一個時間問題。你需要追蹤何時何velData得到它的價值,並確保沒有其他代碼嘗試之前,要使用velData發生

+1

確實是一個計時問題。 ;-) – Leo