javascript – var x = x ||如果在上面定义了x,则“default val”未正确设置

前端之家收集整理的这篇文章主要介绍了javascript – var x = x ||如果在上面定义了x,则“default val”未正确设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@
HTML
<script type="text/javascript">
  var x = "overriden";
</script>
<script src="myjs.js"></script>

myjs.js:

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

由于某些原因,x最终会被设置为“默认值”,而不是“覆盖”,即使最初我将其设置为“覆盖”,甚至将脚本引用包含在myjs.j中.

任何想法为什么会发生这种情况?我正在尝试启用主机页面为包含js文件中使用的变量设置一个替代,否则使用默认值.

解决方法

应用变量声明起重之后的内容
var x;
x = 5;

$(document).ready(function(){
    var x;
    x = x || "default";
});

它看起来最近的x,并看到它的值是未定义的,这是一个错误的值,所以x被设置为“默认”.

如果他们在同一个范围内,你会很好,因为这些声明总是被提升到以上作业:

var x = 5;

var x = x || "default";

其实就是

var x;

x = 5;
x = x || "default";

这被提出是完全没有意义的:

$(document).ready(function(){
    x = x || "default";
});

如果没有定义x,它将抛出一个ReferenceError.

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

$(document).ready(function(){
    var x = window.x || "default";
});

无效的属性读取不会引起ReferenceError,而只是返回undefined.

猜你在找的JavaScript相关文章