脚本标签在DOM中移动的原因不明原因?

时间:2011-08-10 23:08:27

标签: javascript jquery dom

我发现了一些奇怪的行为,试图重现其他东西,我觉得它很有趣。

我的jsbin示例是here

核心代码:

  <div id="diag">
    <script type="text/javascript">
      $(document).ready(function(){
      if(x==undefined){
        var x=1;
      }else{
        x=x+1;
      }
      alert(x);
      });
    </script>
  </div>

(在页面底部)

$(document).ready(function(){
  $('#diag').dialog();
});

$.dialog我知道会在DOM中移动这个脚本,因此预计会执行两次。但是,结果与我预期的不同。

我期望它说1然后2.然而,它再说1然后再说1。这怎么可能呢?这种行为在Firefox5,Chrome和IE8中是一致的

3 个答案:

答案 0 :(得分:0)

x的范围在该函数内部,在第二次调用时重新定义

答案 1 :(得分:0)

var x;
$(document).ready(function(){

    if(x==undefined)
        x=1;
    else
        x=x+1;

    alert(x);
});

答案 2 :(得分:0)

“x”变量的范围是if语句的块。这意味着x在此处定义:

var x=1;

然后被销毁并返回到未定义的地方:

}else{

您要做的是确保x在更大的范围内定义。

<script type="text/javascript">
  var x = 1;
  $(document).ready(function(){
    if(x == undefined){
      x = 1;
    } else {
      x = x + 1;
    }
    alert(x);
  });
</script>