function f(id) {
$.ajax("http://example.com/example",{
success:function(data, textStatus, jqXHR){
$("#"+id).text(data);
}
});
}
成功回调函数可以很好地到达并读取id
变量,但由于ajax调用是非阻塞的,因此id
不会更改另一个函数f()
调用,在启动后发生ajax请求但在收到回复之前?如何在请求ajax呼叫时保存并传递id
?
答案 0 :(得分:2)
不会改变另一个函数f()调用
不,因为每次调用函数时,都会创建作为参数传递的变量的副本。
考虑以下情况:
let a = 1;
function change(param) {
param = 2;
console.log(param);
}
change(a);
console.log(a);
此代码将打印2
,然后打印1
,因为param
是a
的副本,因此更改它不会影响a
。
传递对象的引用时,事情变得有点复杂:
let a = {field: 1};
function change(param) {
param.field = 2; // changes the original object field
param = {field: 7}; // changes the value of param variable
console.log(param.field);
}
change(a);
console.log(a.field);
控制台将打印7
,然后打印2
。在这种情况下,a
是引用,而不是原始值。虽然param
是a
的副本,但它是引用的副本,此副本引用相同的对象。
因此param.field = 2
会更改原始对象的field
。这就是为什么我们在第二个输出中得到2
。
但是,如果我们为param
分配新值,我们会使用对新对象a
的引用覆盖对{field: 7}
的引用。由于param
是a
的副本,因此原始对象不受影响。
答案 1 :(得分:1)
不,它不会改变。它将以自己的成功回调启动一个全新的ajax
请求。最有可能在第一次更新之后的某个时间解决。即使您在服务器向您返回响应之前再次调用f()
,也是如此。您的范围将被保留。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop