typeof和undefined的奇怪结果

时间:2017-04-12 13:01:51

标签: javascript jquery

请向我解释一下,为什么我会0代替5

内部HTML文件:

<script>
    var x = 5;
</script>
<div id="dv"></div>

内部JS文件:

$(function () {
  if(typeof x == 'undefined') {
    var x = 0;
    $("#dv").html(x);
  } else if (x == 5) {
    $("#dv").html(x);
  }
});

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

由于variable hoisting in Javascript您的脚本是运行,就好像它是:

$(function () {
  var x;
  if(typeof x == 'undefined') {
    x = 0;
    $("#dv").html(x);
  } else if (x == 5) {
    $("#dv").html(x);
  }
});

因此x永远不会等于undefined所以它永远不会将其设置为0。请注意,函数中的变量x是与页面中变量x不同的变量。这是因为脚本中的变量是closed over进入函数范围。

如果我理解你的问题是正确的,我会这样做:

<body data-x="5">
...
<div id="dv"></div>
$(function () {
  var x;
  if(typeof $('body').data('x') !== 'undefined') {

    $("#dv").html($('body').data('x'));
  } else {
    $("#dv").html(0);
  }
});