如何使用变量和/或函数解决范围问题?

时间:2014-05-19 02:43:53

标签: javascript max-msp-jitter

我在Max / MSP的编程环境中使用Javascript。如果您有兴趣,可以在Max中basic overview实施http://jsfiddle.net/estevancarlos/WHc5j/。那里没什么特别不寻常的。只是一些自定义功能/方法。

所以我在这里并不完全确定我的术语。我有这个: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上的代码 - {{3}}

建议?

1 个答案:

答案 0 :(得分:3)

  

&#34;所以我在这里并不完全确定我的术语。我有这个:var velData = MultiDimensionalArray(8, 16)全局声明,在下面的函数中引用。它是一个全局变量吗?&#34;

如果velData变量不在其他函数中,则它仅在全局声明。


  

&#34;由于它正在调用函数MultiDimensionalArray,是否会使velData成为函数表达式?&#34;

不,函数表达式与函数的调用无关。它与创建函数的方式有关,除了与您的问题无关的一两个问题之外,它对调用没有任何影响。


  

&#34;无论哪种方式,我都无法在我的函数中从循环外部访问变量:&#34;

然后变量要么不是全局变量,要么在循环运行后的某个时间创建/初始化变量。


  

&#34; post()相当于console.logpost(velData[0][0])在函数内部但不在其外部时起作用。&#34;

然后,似乎在velData初始化之后的某个时间调用它所使用的函数导致它工作,而如果你没有在函数内部调用它,那么它就会被调用。在velData初始化之前立即调用。


  

&#34;我认为,由于velData是全局声明的,我应该能够在函数外部访问它,但我不能。建议&#34;

如果它确实是全球性的,那么它听起来像是一个时间问题。您需要跟踪velData获取其值的位置和时间,并确保在此之前没有其他代码尝试使用velData