var x = x || 如果在其上方定义了x,则"默认值"未正确设置

Ian*_*vis 10 javascript jquery

HTML:

<script type="text/javascript">
  var x = "overriden";
</script>
<script src="myjs.js"></script>
Run Code Online (Sandbox Code Playgroud)

myjs.js:

$(document).ready(function(){
  var x = x || "default val";
  alert(x); // this alerts "default val" and not "overriden"
});
Run Code Online (Sandbox Code Playgroud)

由于某种原因,x最终结束了,甚至"default val"没有"overriden",甚至"overriden"在我甚至包括脚本引用到myjs.js之前我将它设置为.

知道为什么会这样吗?我正在尝试启用托管页面为包含的js文件中使用的变量设置覆盖,否则使用默认值val.

Esa*_*ija 8

应用变量声明提升后的内容:

var x;
x = 5;

$(document).ready(function(){
    var x;
    x = x || "default";
});
Run Code Online (Sandbox Code Playgroud)

它查看最接近的x并且看到它的值undefined是一个假值,因此x设置为"default".


如果他们在相同的范围内你会没事的,因为声明总是在作业之上悬挂,所以:

var x = 5;

var x = x || "default";
Run Code Online (Sandbox Code Playgroud)

实际上只是

var x;

x = 5;
x = x || "default";
Run Code Online (Sandbox Code Playgroud)

这被认为是完全没有意义的:

$(document).ready(function(){
    x = x || "default";
});
Run Code Online (Sandbox Code Playgroud)

它将抛出一个ReferenceErrorif x未定义.


因此要么在同一范围内进行检查,要么执行以下操作:

$(document).ready(function(){
    var x = window.x || "default";
});
Run Code Online (Sandbox Code Playgroud)

无效的属性读取不会导致ReferenceError但只返回undefined.