脚本标签在 DOM 中移动时出现无法解释的行为?

发布于 2024-11-28 17:52:56 字数 645 浏览 0 评论 0原文

我发现一些奇怪的行为试图重现其他东西,我认为这很有趣。

我的jsbin示例在这里

核心代码:(

  <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 中是一致的

I've found some strange behavior trying to reproduce something else and I thought it was interesting.

My jsbin example is here

The core code:

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

(at the bottom of the page)

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

$.dialog I know will move this script in the DOM, so it is expected that it will be executed twice. However, the results are different than I would expect.

I expected for it to say 1 and then 2. However, it says 1 and then 1 again. How is that even possible? This behavior is consistent across Firefox5, Chrome, and IE8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

悲歌长辞 2024-12-05 17:52:56

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

the scope of x is inside that function, it is redefined on the 2nd call

庆幸我还是我 2024-12-05 17:52:56
var x;
$(document).ready(function(){

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

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

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

    alert(x);
});
假情假意假温柔 2024-12-05 17:52:56

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

var x=1;

然后被销毁并在这里返回到 undefined:

}else{

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

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

The scope of the "x" variable is the block for the if statement. This means that x is defined here:

var x=1;

And then is destroyed and returns to undefined here:

}else{

What you want to do is make sure that x is defined in a larger scope.

<script type="text/javascript">
  var x = 1;
  $(document).ready(function(){
    if(x == undefined){
      x = 1;
    } else {
      x = x + 1;
    }
    alert(x);
  });
</script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文