單擊每個div時,如果點擊了div 1,它應該會提示'1',如果點擊div 2,則會提示'5'。我試圖儘可能簡化代碼,因爲這是更大的應用程序所需要的。addEventListener匿名函數中的Javascript變量範圍
<html>
<head>
<style type="text/css">
#div1 { background-color: #00ff00; margin: 10px; padding: 10px; }
#div2 { background-color: #0000ff; margin: 10px; padding: 10px; }
</style>
<script type="text/javascript">
function init()
{
var total = 1;
var div1 = document.getElementById('div1'),
div2 = document.getElementById('div2');
var helper = function(event, id)
{
if (event.stopPropagation) event.stopPropagation();
if (event.preventDefault) event.preventDefault();
alert('id='+id);
}
div1.addEventListener('click', function(event) { helper(event, total); }, false);
total += 4;
div2.addEventListener('click', function(event) { helper(event, total); }, false);
}
</script>
</head>
<body onload="init();">
<div id="div1">1</div>
<div id="div2">2</div>
</body>
</html>
感謝您的幫助! :-)
啊。所以有效的總體變得像變量指針,就像在C++變量*? – 2009-11-22 21:03:19
實際上,它被複制到本地範圍。如果它是一個指針,那麼它會在範圍內和範圍之外改變,這會使你回到原來的問題。 – Matt 2009-11-22 21:34:19
@加里馬特的例子是正確的,這裏有一個你的術語。由於被稱爲「閉包」(http://www.jibbering.com/faq/faq_notes/closures.html),這是JavaScript的一個強大而強大的功能,因此您遇到了特定的問題。馬特向你展示的是如何使用匿名函數和一種稱爲「柯里」的技術來解決閉包屬性(有時會像你所看到的那樣)。請參閱http://ejohn.org/blog/partial-functions-in-javascript/和http://stackoverflow.com/questions/1413916/。 – 2009-11-22 21:57:31