jQuery:基础知识 - 可变范围问题

时间:2010-10-21 14:57:44

标签: jquery variables scope

我已经花了大约一个小时左右的时间试图收集jscript / jquery中的变量范围,以及所有帐户,我的代码应该工作。现在我只想从函数中读取全局变量。我的代码不起作用,现在它非常基本。最终我需要操纵全局变量,但这里一步一步:

var fooBar;
fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(fooBar);
});

HTML:

<span class="var">(Button Test)</span>

它在警告框中返回[Object object]。我真的希望它会让Blah回归我。我知道这是一个非常基本的问题,但我发现的所有例子都非常复杂,而且我很难把它归结为我需要的基本部分。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:5)

您需要将其作为参数删除,如下所示:

var fooBar;
fooBar = "blah";

$('.var').click(function () {
    alert(fooBar);
});

您看到[Object object]的原因是传递给函数的第一个参数(以及jQuery中的任何其他事件处理程序)是the jQuery event object,并且该参数的名称相同意味着您的函数内{ {1}}指的是它,因为它更本地化。你的变量在里面是可用的,它现在被一个更本地的版本覆盖了,因为使用的是同一个名字...就像我上面那样删除它你就会全部设置。

答案 1 :(得分:2)

从函数中删除fooBar,因为它正在创建一个将被使用的局部范围变量,而不是全局变量。

$('.var').click(function () {
    alert(fooBar);
});

答案 2 :(得分:1)

Javascript中的全局变量实际上是window的成员,如果您与局部变量(例如fooBar参数)存在范围冲突,那么您可以完全限定全局fooBar变量像这样:

var fooBar;
fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(window.fooBar);
});

事实上,我要总是用window完全限定全局变量,以避免任何混淆或冲突。实际上,我会写出这样的全部内容:

window.fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(window.fooBar);
});

答案 3 :(得分:0)

您的功能参数中不需要fooBar。这就足够了:

var fooBar;
fooBar = "blah";

$('.var').click(function() {
    alert(fooBar);
});

你的代码太多了,全是:)