我基本上想知道全局变量在javascript / JQuery环境中是如何工作的。我最熟悉一种名为processing的语言,我被告知这种语言是基于java的。我期望javascript和JQuery中的变量表现得像处理中的变量,但是它们不能像我期望的那样工作,我不能为我的生活包围我。
我有一个非常简单的例子来说明我的困惑:
var what="";
$(document).ready(function(){
$("p").click(function () {
what="p";
});
if(what=="p"){
alert(what);
}//end if
});//end doc ready
在处理过程中,这会起作用,因为'what'变量是全局变量,并且通过单击一个段落来改变它,if语句应该不断检查'what'=='p',并触发警报。但事实并非如此 - “什么”似乎只是在click函数中更新,即使它是一个全局变量,所以当涉及到if语句时,'what'仍然等于“”而不是“p”
如果有人能解释为什么会这样,我将非常感激!
答案 0 :(得分:4)
{DOM}首次就绪时if
语句只运行一次。它没有连续运行。如果您希望它在单击处理程序期间运行,那么您将使用以下代码:
var what="";
$(document).ready(function(){
$("p").click(function () {
what="p";
if(what=="p"){
alert(what);
}//end if
});
});//end doc ready
答案 1 :(得分:0)
if语句应该不断检查'what'=='p',并触发警报。
为什么呢?您的代码都没有产生该功能。如果您希望这种情况发生,可以使用setInterval()
:
setInterval(function() {
if(what=="p") {
alert("what");
}
}, 500); // executes function every 500 milliseconds
但这不会发生什么 - 即使它是一个全局变量,它似乎只是在点击功能中更新了什么
不,您的what
变量正在全球更新。您只是没有注意到,因为您对if
功能做了错误的假设(它只被调用一次)。