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);
});