0

我基本上想知道全局变量在 javascript/JQuery 环境中是如何工作的。我最熟悉一种叫做处理的语言,有人告诉我它是基于 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',并触发警报。但这不是发生的事情——“what”似乎只在 click 函数内更新,即使它是一个全局变量,所以当涉及 if 语句时,“what”仍然等于“”而不是“p” .

如果有人能解释为什么会发生这种情况,我将非常感激!

4

2 回答 2

4

if语句仅在 DOM 首次准备好时运行一次。它不是连续运行的。如果您希望它在单击处理程序期间运行,那么您将使用以下代码:

 var what="";

 $(document).ready(function(){
    $("p").click(function () {
       what="p";
       if(what=="p"){
           alert(what);
       }//end if
    });
});//end doc ready
于 2012-08-27T04:00:29.350 回答
0

if 语句应该不断检查是否'what'=='p',并触发警报。

为什么?您的任何代码都不会产生该功能。如果你想让这种情况发生,你可以使用setInterval()

setInterval(function() {
    if(what=="p") { 
        alert("what");
    }
}, 500); // executes function every 500 milliseconds

但这不是发生的事情——“什么”似乎只在点击函数内更新,即使它是一个全局变量

不,您的what变量正在全局更新。您只是没有注意到,因为您对if功能做出了错误的假设(它只被调用一次)。

于 2012-08-27T04:00:19.027 回答