- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析函数声明和函数表达式.doc
浅析函数声明和函数表达式
下面小编就为大家带来一篇浅析函数声明和函数表达 式一一函数声明的声明提前。小编觉得挺不错的,现在分 享给大家,也给大家做个参考。
前两天班级聚会,除了吃喝玩乐就是睡觉扯淡,甚是 喜悦,真是独乐乐不如众乐乐啊。
PS:毕业的或即将毕业的有时间能聚就聚吧,毕了业 以后属于自己的时间能聚到一块儿可就少太多了。
现在有点时间来看点东西总结些东西了,又因为前段 时间片片断断地看了看JavaScr ipt的函数部分,所以抽时 间总结下函数的相关部分,当然,里面有些部分都是自己 的理解,如果有理解的不对的地方还请小伙伴们不吝指岀。
这一节我结合自己的理解和小伙伴们聊一下函数声明 的声明提前。
注:有的地方也叫函数声明提升。翻译的不一样,意 思一样,大家理解就行。理解万岁!
在聊函数声明的声明提前之前,有必要介绍下函数定 义的几种方法,大部分小伙伴们应该都不陌生。了解的或 者不想了解的就痛快地一滚轮滚下去吧,不熟悉的或者想 再熟悉一下的就放慢脚步起步走。
定义函数的方法
定义函数的方法主要有三种:
函数声明(FunctionD eclaration)
函数表达式 Fu nctionExpre ssion)
new Function 构造函数
其中,经常使用的是函数声明和函数表达式的函数定 义方法,这两种方法有着很微妙的区别和联系,而且这两 种方法的使用也容易混淆,所以这篇文章主要总结下这两 种函数定义方法的相关知识点,当然本文的主题依然是关 于函数提前的。
函数声明的典型格式:
f unctionfunc tionName (ar gl, arg2,...) {
nbsp; It ;!--functio nbody—gt;
}
函数表达式
#8226;函数表达式的典型格式:
varvariab le=function (argl, arg2,...) {
nbsp :nbsp;nbsp:It;!--funct ionbody—gt ;
}
包含名称(括弧,函数名)的函数表达式:
varvariahl e=functionf unctionName
(argl, arg2,???){
nbsp ; nbsp; It; ! 一functionbo dy一gt; 像上面的带有名称的函数表达式可以用来递归:
varvariable =functionfu nctionName (x) {
nbsp;nbs p; if (xlt;=l )
nbsp; nbs p; nbsp; retu rnl;
nbsp;nb sp;else
nb sp: nbsp: nbs p: returnx*f unctionName (x);
}
声明提前
va r声明提前
小伙伴们应该都听说过声明提前的说法,我想在此再 次重申一遍,因为声明提前是函数声明和函数表达式的一 个重要区别,对于我们进一步理解这两种函数定义方法有 着重要的意义。
但是再说函数声明提前之前呢,有必要说一下v ar声 明提前。
先给出v ar声明提前的结论:
变量在声明它们的脚本或函数中都是有定义的,变量 声明语句会被提前到脚本或函数的顶部。但是,变量初始 化的操作还是在原来var语句的位置执行,在声明语句之 前变量的值是undefined。
上面的结论中可以总结出三个简单的点:
变量声明会提前到函数的顶部;
只是声明被提前,初始化不提前,初始化还在原来 初始化的位置进行初始化;
在声明之前变量的值是undefinedo
还是来例子实在:
v arhandsome二handsome;
functionh andsomeToUg ly () {
nbsp ; alert (hand some);
nbs p; varhandso me二ugly;
nbsp;alert (handsome);
}
handsomeTo Ugly ();
正确的输出结果是:
先输出u ndefined,然后输出ugly。
错误的输出结果是:
先输出h andsome,然后输出ugly。
这里正是变量声明提前起到的作用。该handsome局部 变量在整个函数体内都是有定义的,在函数体内的 handsome变量压住了,哦不对,是覆盖住了同名的hands ome全局变量,因为变量声明提前,即varh andsome被提 前至函数的顶部,就是这个样子:
varhand some」hands ome; func tionhandsom eToUgly () { n bsp; varhand some;
nbsp ; alert (hand some);
nbs p; varhandso me二ugly; nbsp;alert (handsome);
} handsomeTo Ugly ();
所以说在aler
文档评论(0)