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

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

myjs.js:

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

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

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

解决方法

应用变量声明起重之后的内容
  1. var x;
  2. x = 5;
  3.  
  4. $(document).ready(function(){
  5. var x;
  6. x = x || "default";
  7. });

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

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

  1. var x = 5;
  2.  
  3. var x = x || "default";

其实就是

  1. var x;
  2.  
  3. x = 5;
  4. x = x || "default";

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

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

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

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

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

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

猜你在找的JavaScript相关文章