【发布时间】:2013-11-04 23:17:53
【问题描述】:
我有一个函数 - 让我们将它定义为 function getdata(after){},它以 after 参数作为函数。很自然。该函数正在从其他函数运行,该函数在其范围内定义了一些变量:
$('.button').click(function(){
var rel = $(this).attr('rel');
var mooo = $(this).parent().offset().left;
getdata(function(){alert(rel);console.log(moo)});
});
我如何正确传递这些变量,所以它真的和点击按钮时一样吗?它不能是全局变量,因为用户可以垃圾邮件单击按钮,并且它应该在单击期间保持变量原样,即使 after 函数会在 10 分钟后以随机顺序被调用,因为正如名称所说 - 它在 ajax 请求之后被调用。
这只是一个例子 - 这个想法是这个 after 函数也是可变的,从完全不同的地方调用。
好的,收到-1,因为不清楚我在问什么,所以我试着解释一下这个问题。我真的不明白什么时候变量作为变量传递,什么时候作为变量的指针传递,变量的指针可能会在它被传递给的函数使用之前发生变化。
当我在一个函数中定义变量并将其传递给另一个函数时,它是指针还是独立变量?当我再次调用 origin 函数时,这些变量会改变 - 它会影响之前“shedled”的函数吗?或者变量之前的单词 var 意味着 - 将其定义为全新的变量,并且每次调用带有 var 的函数时,它都会将该变量作为全新的变量分配到内存中,不依赖于发生的任何事情?
我通常是一名 PHP、C 和 Delphi 程序员,我有点难以理解这些变量范围是如何工作的,尤其是当一切都是异步和回调时。
【问题讨论】:
-
除非发送给函数的参数是一个对象,否则它将传递它的值而不是它的引用。当您发送一个字符串(
$(this).attr('rel')属性)和一个整数($(this).offset().left)时,您无需担心 getdata 调用回调的可能延迟。回调中打印的变量将包含单击按钮时的值。 -
如何确定它是作为字符串还是对象传递?
$(this).offset()是一个对象,$(this).offset().left是独立字符串?如果我想传递$(this)发送者对象,以便能够在函数完成后更改对象? -
@FlashThunder 查看我的更新答案。我不建议您使用它,但它可以让您深入了解变量范围和 JS 的动态特性。
标签: javascript jquery