JavaScript:使用setInterval()将变量从一个函数传递到另一个函数?
我有一个循环执行函数的函数,例如:JavaScript:使用setInterval()将变量从一个函数传递到另一个函数?,javascript,function,variables,Javascript,Function,Variables,我有一个循环执行函数的函数,例如: function(f){ var variable; for(z = 0; z < 10; z++){ variable = "cool"; setInterval(f) } 在这里,一个人应该得到一个警告框说嗨。这是理论,但行不通: 变量“Variable”未定义 浏览器可能会忽略错误并发出未定义的警报 但是无论如何,我如何“传递”变量,而不改变它的范围JavaScript所具有的,因此您可以这样做: v
function(f){
var variable;
for(z = 0; z < 10; z++){
variable = "cool";
setInterval(f)
}
在这里,一个人应该得到一个警告框说嗨。这是理论,但行不通:
变量“Variable”未定义
浏览器可能会忽略错误并发出未定义的警报
但是无论如何,我如何“传递”变量,而不改变它的范围JavaScript所具有的,因此您可以这样做:
var x = 0;
setInterval(function() {
//do something with x
}, 1000);
在您的具体情况下,您应该这样做:
function say(f){
var variable = "hey";
setInterval(function() {
f(variable); //invoke the say function's passed-in "f" function, passing in "hey"
}, 1000);
}
say(function(arg){
//arg will be "hey"
alert(arg);
});
接受两个参数,第二个参数是您希望延迟执行传入函数引用的时间量(毫秒)。鉴于lambda函数来自另一个作用域,您不能使用闭包直接获取函数中的值。您必须通过闭包将值直接传递给函数,并准备在lambda中接收它:
function say(f){
var variable = "hey";
setInterval( function(){ f(variable) }, 500 );
}
say(function(yyy){
alert(yyy);
});
使用函数的方法。
如果你喜欢有一个没有参数的函数,你可以考虑使用OR方法:
现在修好了;虽然看起来不再干净了。尽管f(变量)更干净;)编辑:尽管我最终会使用call方法,但我知道setInterval包含两个参数。将第二个1设置为零与不设置它几乎相同,它将在任何时间内执行。这只是一个简单的执行方法,尽管还有其他(可能更好)的方法。在我看来,这是最好的方法,谢谢!其他方法几乎相同,但这一个看起来更干净,正是我所需要的。lambda lol是什么,无论如何,这是一个很好的方法,尽管我不喜欢依赖“另一边”(在本例中为yyy)的参数的存在
function say(f){
var variable = "hey";
setInterval( function(){ f(variable) }, 500 );
}
say(function(yyy){
alert(yyy);
});
function say(f){
var variable = "hey";
setInterval(function(){
f.call(null, variable);
}, 1000);
}
say(function(variable){
alert(variable)
});
function say(f){
var variable = "hey";
setInterval(function() {
f.call(variable); // set the context
}, 1000);
}
say(function(){
alert(this);
});