函数声明与函数表达式

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

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

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

 

分析下现两段代码:

<script type="text/javascript">
alert(a);

function a() {
	return 'xx';	
}

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

alert(a);
</script>
<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前面。何以见得?

<script type="text/javascript">
	alert(a);
	var k = function a() {
		return 'x';
	}
</script>

 

 

image

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

 

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

<script type="text/javascript">
alert(a);
function a() {
	return 'xx';	
}
var a = '1';
</script>

image

 

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

image

 

 

 

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

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

 

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

转载于:https://www.cnblogs.com/meteoric_cry/archive/2010/09/23/1833385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值