setInterval内参数为局部变量的解决方案
setInterval内参数为局部变量的解决方案
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)还有没有其它的办法??????
(2)拼字符串方法:flag=setInterval("grow("+width+")",1000);这个时候可以获得width的值,其实本人并不是很理解为什么这样可以
这种方法很好啊,一般都这样的
g=grow(width);
在setInterval时g作为参数被传入,这就是一个闭包,通过g可以访问这个局部的变量,第二个是一样的原理,相当于把g匿名了。这就是跟下面这个例子一样:
function A(){
var a = 1;
function B(){
a++;
alert(a);
}
C(B);
}
function C(f){
f();
}
A();