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