JavaScript:是否可以将变量传递给分配给变量的回调函数?

时间:2010-10-15 21:12:04

标签: javascript ajax

很多人都说在评论中这个问题太多了,这让我对此犹豫不决,但我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery和( 2)问题通常包含我不理解的技术问题。

我有一个带变量的函数。变量被赋予一个函数。我确信这个概念并不是AJAX所独有的,但这就是我使用它的上下文,如果它有所作为。

function iClick(this)
{
    var foo = "I would like to pass this.";

    ajax.onreadystatechange = function (foo) { alert(foo); }
}

我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我甚至可以这样做吗?

5 个答案:

答案 0 :(得分:24)

只是不要将该变量声明为匿名函数中的参数,如下所示:

function iClick(this)
{
    var foo = "I would like to pass this.";
    ajax.onreadystatechange = function () { alert(foo); }
}

当您调用第一个参数foo时,无论是调用,该回调都会在函数内的foo内传递。如果您想引用先前声明的变量,请确保使用具有相同名称的参数。

答案 1 :(得分:16)

您可以创建这样的功能

var c="hello";

(function(b){
   alert(b) 
})(c);

结果将是“你好”

答案 2 :(得分:3)

您也可以这样做,但也许没有必要:

function iClick(this)
{
    var foo = "I would like to pass this.";

    ajax.onreadystatechange = (function(thevar) {
        return function () { alert(thevar); };
      })(foo);
}

答案 3 :(得分:1)

正如@John Hartsock所说,每个人都应该记住的答案就是这个

var c="hello";

(function(b){
   alert(b) 
})(c);

这在for循环中非常重要,当它内部有异步函数时,因为否则你不会得到正确的项目。

告诉我,从这里发出什么?



for (var i=0; i<5; i++){
  setTimeout(function(){ 
    console.log(i); 
    }, 1000);
}
&#13;
&#13;
&#13;

确切地说:全部5,因为当1秒后触发所有计时器时,变量i已经处于值5

但如果您使用自我调用的匿名函数(SIAF)

&#13;
&#13;
for (var i=0; i<5; i++){
  (function (j){
    setTimeout(function(){ 
      console.log(j); 
      }, 1000);
   })(i);
}
&#13;
&#13;
&#13;

它确实有效,因为每次启动函数时,它都会运行函数的另一个实例,并且作为任何函数,它都有自己的局部变量。我不仅定义函数,我也立即运行它(通过最后的();),但是在内部,将使用不同的内部局部变量创建函数的新实例,因为我解析为每次运行它时都会运行一个不同的变量。

答案 4 :(得分:0)

我相信你想要那样的东西

function handleAjaxRequest(params) {
    var context = {'b':'inner', 'c': params['c']};
    function rendered(html) {
      // render
    }
    function gotPart(part) {
        context['a'] = part;
        engine.render(context).addCallback(rendered);
    }
    ajax.getPart(params).addCallback(gotPart);
}