Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:是否可以将变量传递到分配给变量的回调函数中?_Javascript_Ajax - Fatal编程技术网

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

JavaScript:是否可以将变量传递到分配给变量的回调函数中?,javascript,ajax,Javascript,Ajax,很多人说评论中问得太多了,这让我很犹豫是否要问这个问题,但我仍然没有在他们的回答中找到解决方案,主要是因为(1)他们通常使用jQuery,(2)问题通常包含我不理解的技术细节 我有一个函数,里面有一个变量。变量被分配了一个函数。我确信这个概念不是AJAX独有的,但这就是我使用它的背景,如果它有什么不同的话 function iClick(this) { var foo = "I would like to pass this."; ajax.onreadystatechange

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

我有一个函数,里面有一个变量。变量被分配了一个函数。我确信这个概念不是AJAX独有的,但这就是我使用它的背景,如果它有什么不同的话

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

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

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

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

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

当您调用第一个参数
foo
时,回调传递的是函数内部的
foo
。如果要引用以前声明的变量,请确保不要使用同名参数。

您可以创建如下函数

var c="hello";

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

结果是“你好”

您也可以这样做,但可能不需要:

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

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

我相信你想要那样的东西

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

正如@John Hartsock所提到的,每个人都应该真正记住的答案是

var c="hello";

(function(b){
   alert(b) 
})(c);
这一点非常重要,例如在
for
循环中,当循环中有一些异步函数时,这一点非常重要,因为否则就无法获得正确的项

告诉我,从这里出来的是什么


for(var i=0;iOh!我以为它超出了它的作用域。谢谢!@Tarik-JS有函数作用域和闭包。即使在父函数返回后,函数也可以访问父作用域中的变量。@PeterAjtai如果在ajax.onreadystatechage内我想给foo分配一个新值,那在iClick()中会可见吗例如,函数iClick(this){var foo=“我想传递它。”ajax.onreadystatechange=function(){foo=“Value changed”;}console.log(foo);//这是否会打印“Value changed”?}@Ali-No,因为
console.log(foo)<代码> <代码> > AJAX.OnRead StaseCechange =…<代码>后立即被触发,但是<代码> OnRead状态更改> /代码>本身只会在将来某个时间点被触发……所以,它都是相同的<代码> Foo,但是您必须考虑时序。修改后的ave。调用多个回调将不起作用:+1。我说,询问您是否已搜索但未找到所需内容。我们中的许多人来自非编程背景,因此一些计算机科学的细微差别甚至基本原理通常需要澄清(至少在我的情况下)。这就是答案,当您想要将变量从外部解析为异步回调(如
db)时,这非常有用。查询instance@JoãoPimentelFerreira测试非常简单。奇怪,你问了吗?但是回答。c变量应该是范围内的变量,它是函数的本地版本。@JoãoPimentelFerreira这里是一个简单的测试。你会看到c的值作为一个全局值没有被修改。非常愚蠢的问题:)当然!!!函数以匿名方式定义并立即运行,其值
c
解析为函数局部变量
b