Javascript 带有typeof和未定义的奇数结果

Javascript 带有typeof和未定义的奇数结果,javascript,jquery,Javascript,Jquery,请向我解释一下,为什么我得到的是0而不是5 内部HTML文件: <script> var x = 5; </script> <div id="dv"></div> 我在这里遗漏了什么?因为您的脚本是ran,就好像它是: $(function () { var x; if(typeof x == 'undefined') { x = 0; $("#dv").html(x); } else if (x == 5)

请向我解释一下,为什么我得到的是
0
而不是
5

内部HTML文件:

<script>
    var x = 5;
</script>
<div id="dv"></div>
我在这里遗漏了什么?

因为您的脚本是ran,就好像它是:

$(function () {
  var x;
  if(typeof x == 'undefined') {
    x = 0;
    $("#dv").html(x);
  } else if (x == 5) {
    $("#dv").html(x);
  }
});
所以
x
从不等于
undefined
,所以它从不将其设置为
0
。注意:函数中的变量
x
与页面中的变量
x
不同。这是因为脚本中的变量位于函数范围内


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

<body data-x="5">
...
<div id="dv"></div>

在哪里加载js文件?在脚本标记之前或之后分配
x
?它在IIFE@Ozan当然,以前。。。在代码中创建本地
x
之前,将加载
x=5
,这将覆盖全局
x。即使在
if
子句之后提到
var x=0
x
仍然在
if
之前本地重新声明(这称为提升)。然后它将是未定义的,在这种情况下,它将被定义为
0
谢谢。那么,这是什么解决方法?或者这仅仅意味着我将无法在调用函数内部使用
x=5
x
?因为如果我从调用函数中删除
var
,它会工作,而您的实际问题是什么?为什么不定义x?这整件事有点像呵呵:)好吧,我正试图在我得到的动态变量上操纵结果。然后我想检查一下结果。因此,如果我得到
x=undefined
,我想将它定义为
0
,如果它在页面上定义为
x=1
,我想使用
if-else
语句来输出一些特定的结果。如果它的
x=2
x=1
完全相同,但输出不同,但显然这里的重点是正确编码,以正确的方式,也就是说:)所以我现在不确定,如果我从“作用域”调用函数中删除
var
,我会正确编码吗?因为就我现在所知,如果调用函数中没有
var
,它应该在外部寻找它,对吗?所以它应该是正确的。还是我弄错了?
<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);
  }
});