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中.
解决方法
应用变量声明起重之后的内容:
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.