function load()
{
    var width=1;
    flag=setInterval(grow(width),1000);
}function grow(width)
{
    alert(width);
}如上,由于setInterval是window下的全局方法,而var width=1使得width为局部变量,所以导致setInterval(grow(width),1000)这种方式是无法顺利弹出正确的结果的,解决办法总结如下:(1)讲var width=1;改为this.width=1,这个时候width成为全局变量(当然也可以直接把var width=1放到load()
函数外)(2)拼字符串方法:flag=setInterval("grow("+width+")",1000);这个时候可以获得width的值,其实本人并不是很理解为什么这样可以汗(3)另外一种网上的方法:flag=setInterval(grow.call(null,width),1000);(用apply一样的),这个我更加不理解,求高人解释(4)还有没有其它的办法??????

解决方案 »

  1.   

    (2)拼字符串方法:flag=setInterval("grow("+width+")",1000);这个时候可以获得width的值,其实本人并不是很理解为什么这样可以这种方法很好啊,一般都这样的
      

  2.   


    我不理解的是:同样是setInterval里面的width,为什么有时候可以获取有时候又不可以获取,主要还是作用域方面不是很理解
      

  3.   

    本人再补充两种方法:(1)var g=grow(width);
        flag=setInterval(g,1000);(2)采用匿名函数 flag=setInterval(functiong(){grow(width)),1000);再求高人解释各种width在setInterval中的作用域问题
      

  4.   


    g=grow(width);
    在setInterval时g作为参数被传入,这就是一个闭包,通过g可以访问这个局部的变量,第二个是一样的原理,相当于把g匿名了。这就是跟下面这个例子一样:
    function A(){
    var a = 1;
    function B(){
    a++;
    alert(a);
    }
    C(B);
    }
    function C(f){
    f();
    }
    A();