前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >函数声明与函数表达式

函数声明与函数表达式

作者头像
meteoric
发布2018-11-15 14:34:06
7690
发布2018-11-15 14:34:06
举报
文章被收录于专栏:游戏杂谈

函数声明:直接声明一个函数 function fnName() {};function声明必须有方法名,而出现在表达式里的方法名都会被忽略。

函数表达式:通过赋值,将一个变量的引用指向一个指定的function或匿名函数,如:

var fnName = function () {};//可以是匿名函数也可以是具名函数

分析下现两段代码:

代码语言:javascript
复制
<script type="text/javascript">
alert(a);

function a() {
	return 'xx';	
}

var a = function a() {
	return 'x';
}

alert(a);
</script>
代码语言:javascript
复制
<script type="text/javascript">
alert(a);

function a() {
	return 'xx';	
}

var a = function a() {
	return 'x';
}

alert(a);
</script>

两者其实差异并不大,主要是在var a = function a() {}这一点上,IE与其它浏览器解析上存在差异,其中IE是无论是它作为函数表达式或是函数声明,都将提到scope前面。何以见得?

代码语言:javascript
复制
<script type="text/javascript">
	alert(a);
	var k = function a() {
		return 'x';
	}
</script>
image
image

其它浏览器将提示a未定义(a is not defined),剩下的只是顺序问题。

预解析时,a此时为function a() {},而无论其是否在var a之前或是之后。

代码语言:javascript
复制
<script type="text/javascript">
alert(a);
function a() {
	return 'xx';	
}
var a = '1';
</script>
image
image

可以理解为在解析<script>代码段时,将var先提前进行声明,提到当前scope前面,然后再对函数表达式进行预解析。var a的定义与function a的位置并无关系,而在执行到var a时,a的引用发生了改变,将会指向值”1”

image
image

想继续了解具名函数与匿名函数的,可以点击下面的链接查看我之前写的文章:

hi.baidu.com/meteoric_cry/blog/item/65f8d3c4651d64a58326ac23.html

转载请注明出处 :),如有不同意见,欢迎丢鸡蛋。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档