在函数之间传递变量

时间:2012-05-15 17:14:09

标签: javascript jquery

我在$(document).ready

中执行了以下代码行
$('#sliding_menu_area').toggle(effect, reAlign);

reAlign是在我的$(document).ready文件中.js主函数之外声明的函数。

我有一个名为tag的变量,它也在$(document).ready内声明,我需要将变量传递给reAlign函数。我试过了

$('#sliding_menu_area').toggle(effect, reAlign(tag));

但它不起作用。我是否可以将tag变量声明为全局,因此在$(document).ready之外声明的函数能够访问它?到目前为止,在$(document).ready内声明的函数可以正常访问它。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

$('#sliding_menu_area').toggle(effect, reAlign(tag));

您的代码使用reAlign参数执行tag,然后将返回值传递给toggle(作为第二个参数)。

$('#sliding_menu_area').toggle(effect, function() { reAlign(tag); });

答案 1 :(得分:2)

我通常会避免创建任何全局...或者至少尽可能保留您的全局命名空间。例如,我有一个Page类,我将其用于各种函数,例如Page.notify(" some message")。当我需要让整个页面可以访问某些内容时,我会创建一个像Page.Tag这样的变量。如果您只需要reAlign方法的标记,那么请遵循Karoly的建议,避免创建一些并不真正需要全球化的东西。

答案 2 :(得分:1)

Karoly的回答有效,另一种方法是执行以下操作:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

$('#sliding_menu_area').toggle(effect, reAlign.bind(window, tag));

绑定你的函数,以便在调用它时,使用window作为this变量调用它,并将标记作为函数的第一个参数。基本上和Karoly所说的一样,用不同的习语。

答案 3 :(得分:0)

如果reAlign函数需要知道DOM元素(传递为this),最好使用:

$('#sliding_menu_area').toggle(effect, function () {
  reAlign.call(this, tag);
});