全局变量如何在jquery / javascript中工作? (初级水平)

时间:2012-08-27 03:55:18

标签: javascript jquery global-variables processing

我基本上想知道全局变量在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”

如果有人能解释为什么会这样,我将非常感激!

2 个答案:

答案 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功能做了错误的假设(它只被调用一次)。