几个细节需要注意

题目:function Foo() {
        getName = function () { alert (1); };
         return this;
      }
      Foo.getName = function () { alert (2);};
      Foo.prototype.getName = function () { alert (3);};
      var getName = function () { alert (4);};
      function getName() { alert (5);}
//请写出以下输出结果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

1、函数表达式

var getName 与 function getName 都是声明语句,区别在于 var getName 是函数表达式,而 function getName 是函数声明。

函数表达式最大的问题,在于js会将此代码拆分为两行代码分别执行。

例如下代码:

console.log(x);//输出:function x(){}
var x=1;
function x(){}

实际执行的代码为,先将 var x=1 拆分为 var x; 和 x = 1; 两行,再将 var x; 和 function x(){} 两行提升至最上方变成:

var x;
function x(){}
console.log(x);
x=1;

所以最终函数声明的x覆盖了变量声明的x,log输出为x函数。

同理,原题中代码最终执行时的是:

function Foo() {
    getName = function () { alert (1); };
    return this;
}
var getName;//只提升变量声明
function getName() { alert (5);}//提升函数声明,覆盖var的声明

Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
getName = function () { alert (4);};//最终的赋值再次覆盖function getName声明

getName();//最终输出4

2、变量声明提升

即所有声明变量或声明函数都会被提升到当前函数的顶部。

例如下代码:

console.log(‘x‘ in window);//true
var x;

x = 0;

代码执行时js引擎会将声明语句提升至代码最上方,变为:

var x;
console.log(‘x‘ in window);//true
x = 0;
时间: 2024-10-28 23:18:36

几个细节需要注意的相关文章

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

使用TCP时序图解释BBR拥塞控制算法的几个细节

周六,由于要赶一个月底的Deadline,因此选择了在家VPN加班,大半夜就爬起来跑用例,抓数据...自然也就没有时间写文章和外出耍了...不过利用周日的午夜时间(不要问我为什么可以连续24小时不睡觉,因为我觉得吃饭睡觉是负担),我决定把工作上的事情先放下,还是要把每周至少一文补上,这已经成了习惯.由于上周实在太忙乱,所以自然根本没有更多的时间去思考一些"与工作无关且深入"的东西,我指的与工作无关并非意味着与IT,与互联网无关,只是意味着不是目前我在做的.比如在两年前,VPN,PKI这

细节彰显境界,境界成就未来

电视里直播着一场国际比赛.对手分别是中国乒乓球骁将刘国正和德国名将波尔.两强相遇,胜负难分,经过六局的艰苦打拼,仍然不分高低,这让观众的心都提到了嗓子眼儿.到了决定胜负的关键一局,刘国正以12∶13落后,如果再输一分就将被淘汰.观众心里都为他默默捏着一把汗. 在这关键时刻,刘国正的一个回球出界.波尔的教练见状后立即起身狂欢,并准备冲进场内拥抱自己的弟子. 戏剧性的一幕出现了,在这一瞬间,波尔立即举手示意,指向台边--这是一个擦边球,应该是刘国正得分! 教练很惊讶,观众也很惊讶,怎么可能呢?就这样

apache配置虚拟主机时需要注意到几个小细节

如今apache在web服务器这块市场占有率还是很高的,而配置虚拟主机现在也是用的非常多,不过在配置虚拟主机的时候一定要注意几个小细节. 首先要注意你的apache版本,注意是2.2还是2.4的. 配置2.2的时候,配置虚拟主机该这样写: NameVirtualHost ip:80   //注意此处与2.4不同 <VirtualHost ip:80> ServerName www1.myweb.com DocumentRoot "/myweb/vhost/www1" <

Mongodb入门系列(4)——Mongodb体系结构与客户端基本操作及注意细节

说到Mongodb的体系结构,免不了与关系型数据库做个对比.这里以MySQL为例,我们进行一些比较: 从逻辑结构上对比: MySQL层次概念 MongoDB层次概念 数据库(database) 数据库(database) 表(table) 集合(collection) 记录(row) 文档(document) 在MongoDB中没有行.列.关系的概念,集合中的文档相当于一条记录,这体现了模式自由的特点. 从数据存储结构上对比: MySQL的每个数据库存放在一个与数据库同名的文件夹中,MySQL如

mongoDB的读书笔记(05)_【Sharding】(02)_分片的一些概念和小细节

分片的一些概念与细节 Primary Shard 在Replica set中有Primary和Secondary的概念,那么在Sharding中其实也有一个Primary的概念. 任何一个mongoDB中都有一个未分区的整体DB的collection在某一个Shard中.如下图. Collection1在ShardA中有一部分Chunks在ShardB中也有一部分Shards,而在ShardA 中却有一个Collection2保存整体的ShardA+ShardB的Collection1的和. C

程序猿之---C语言细节24(段错误、类型提升、sizeof &#39;A&#39;)

主要内容:段错误.类型提升.sizeof  'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d\n",*p); #if 0 int *q = 0; // 引起段错误,在linux中运行可看到段错误,在windows下运行时直接出错 *q = 1; #endif

cocos2d-x 3.0 rapidJson 操作应该注意的细节

Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); std::string path = FileUtils::getInstance()->fullPathForFilename("story.json"); std::string document = FileUtils::

企业网站上线前,这三个小细节需要注意了

以往,当完公司网站建设成之后,很多人都急着准备上线的事情,认为网站上线越快,就越快被百度收录.被用户看到.但是,根据我们全方面的考虑和实际的操作经验得出,这种想法其实是错误的.为什么呢? 首先要知道,网站是否可以快速地出现在用户眼前,主要是由搜索引擎收录情况所决定的,而不是上线时间的快慢.如果网站质量不好,没有被搜索引擎收录或者收录效果非常差,那么就很难在激烈的竞争中脱颖而出,也不可能排在搜索页面的前面,这样就很难发挥网站的宣传推广作用了. 因此,如果想要公司网站能被用户快速找到,最好要先提高搜

记观察到的微信的细节设计

首先要明确,微信的定位是 熟人间的社交圈 微信分四屏,一屏是主屏,一进去就是朋友之间的消息.二屏是好友目录,包括公众号全部收录在一个入口放在这里.三屏是发现,一些基于社交的拓展功能都放在这里.这里分开了几个类别,朋友圈是最重要的功能,单一类:第二类是对身边的事的场景应用:第三类是陌生人社交的设计:第四类就是游戏和shopping.第四屏的话是个人信息. 设计细节: 例如你点了联系人,然后返回了手机桌面,再进微信还是先出现第一屏,因为用户退出了再返回很可能就是有新信息进入:朋友圈你看到某个位置,退