2010-10-21 92 views
1

我已经在大约一个小时左右的时间内搜寻了尽可能多的关于jscript/jquery和所有帐户的变量范围,我的代码应该工作。现在我只想从函数中读取全局变量。我的代码不起作用,现在它非常基础。最后,我将需要处理的全局变量,但一步一个脚印的位置:在警告框jQuery:基础知识 - 变量范围问题

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

它返回[Object对象]:

var fooBar; 
fooBar = "blah"; 

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

HTML。我真的希望能为我回归Blah。我知道这是一个非常基本的问题,但我发现的所有例子都非常复杂,而且我很难将它归结为我需要的基本部分。任何帮助是极大的赞赏。

回答

5

你需要删除它作为一个参数,像这样:

var fooBar; 
fooBar = "blah"; 

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

你看到[Object object]的原因是传递给函数(和jQuery的任何其他事件处理程序)的第一个参数是the jQuery event object,并且该参数被命名为相同意味着在您的功能fooBar内引用它,因为它更加本地化。你的变量是可用的,它只是由当前更多的本地版本覆盖,因为使用了相同的名称...像我上面那样删除它,你将全部设置。

+0

我以为我已经试过这个较早,但它可能是,当我有更多的可能造成我的错误代码。我仍然不太理解你的解释。你是说.click事件是作为testVar传递的,因此是'[Object object]'? – mosquito 2010-10-21 15:07:49

+0

@mosquito - 第一个参数,不管你怎么命名(通常是'e'或'event'),都是jquery创建的'click'事件对象,当你将它作为一个字符串显示时,alert()你会得到'[Object object]'。它与你之前的'fooBar'变量没有任何关系,它只是共享一个名字,所以'alert()'使用了一个完全不同的变量,因为它更接近或者更靠近本地。 – 2010-10-21 15:16:35

2

从函数中删除fooBar,因为它正在使用一个将被使用的本地作用域变量而不是全局变量。

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

在函数的参数中不需要fooBar。这将足够了:

var fooBar; 
fooBar = "blah"; 

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

你有太多的代码,是所有:)

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); 
});