很多人都说在评论中这个问题太多了,这让我对此犹豫不决,但我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery和( 2)问题通常包含我不理解的技术问题。
我有一个带变量的函数。变量被赋予一个函数。我确信这个概念并不是AJAX所独有的,但这就是我使用它的上下文,如果它有所作为。
function iClick(this)
{
var foo = "I would like to pass this.";
ajax.onreadystatechange = function (foo) { alert(foo); }
}
我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我甚至可以这样做吗?
答案 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;
确切地说:全部5,因为当1秒后触发所有计时器时,变量i
已经处于值5
。
但如果您使用自我调用的匿名函数(SIAF)
for (var i=0; i<5; i++){
(function (j){
setTimeout(function(){
console.log(j);
}, 1000);
})(i);
}
&#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);
}