首页 > 其他 > 详细

字面量对象遇到自执行函数

时间:2017-01-03 19:05:45      阅读:134      评论:0      收藏:0      [点我收藏+]

今天在测试一个函数内部利用函数名调用自身时,想到一个问题,如果一个对象具有相同的名称,并且刚好在函数执行之前的作用域,就想知道,在函数内部调用该名称时,优先级是什么样的,可是还没测出来这个问题时,却遇到了一个奇怪的问题。

直接上代码:

var bar = {
  count : 0
}
     
(function foo() {
  foo.count = 4;
  console.log(foo)
})();

  不知道有多少人会写到类似的代码,一个字面量的对象,后面跟上一个自执行函数,从个人角度而言,仅仅看这段代码,不会觉得有任何的问题,可是在浏览器中执行该代码的时候,报错了,居然报错了。。。

技术分享

  我就想知道,你为什么报错,你凭什么报错?

  报错提示的是中间值不是一个函数,意思是说,第一个括号内的函数不是一个表达式,他没办法立即执行。

  这就懵逼了,从一脸懵逼到各种懵逼,反正不知道哪里的问题。然后瞎捣鼓一通,发现加个分号就搞定了。 

var bar = {
  count : 0
};
     
(function foo() {
  foo.count = 4;
  console.log(foo)
})();

  就这么个分号搞定了,我就想知道这是为什么呢?

  《编写可维护的javascript》第7页讲到“语句结尾”的时候,很明确的说明了分析器具有自动分号(Automatic Semicolon Insertion, ASI)插入机制,JavaScript代码省略分号也是可以正常工作的。

  一直以来,也是知道在哪里避免这种分号结尾可能导致的问题。但是完全看不明白这个分号的问题是什么?求解!

字面量对象遇到自执行函数

原文:http://www.cnblogs.com/zhuhuoxingguang/p/6245750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!