2010-10-21 46 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); 
});