函数声明和函数表达式

来源:互联网 发布:淘宝发货了还能退款吗 编辑:程序博客网 时间:2024/04/26 04:12

可能在其他语言中看起来有点奇怪,但是在javascript

中,函数确实有两种含义,第一种和其他语言相似,

函数是一段可以反复调用执行的代码。但另一方面

javascript函数也是一种对象,他可以拥有属性和方法

就和一般的对象一样。这也意味着函数在javascript是

如此的重要和多变。因为他是对象,那么他自然可以和

其他对象一样,赋值给一个变量,也就是被引用,另外

他也可以作为另一个函数的返回值或者参数。那么函数

声明和函数表达式有什么区别呢?其实来说,两者并

没有本质的区别,都能创建一个函数对象,只不过函数

表达式是一个完整的语句,但是函数表达式则必须是一个

表达式的一部分,有时他们是没有区别的,区分他们要看

他们所处上下文,比如在一个赋值语句中他是一个表达式,

否则就是一个声明。声明和表达式的区别在于什么呢?

首先我们说一个函数声明会被无条件的提前,即可以提

前调用,但函数表达式则需要执行到他是才能创建一个

函数对象。另外,由于他是表达式的一部分,因此其

作用域也是受限的。比如var fun=function a(){};你只能

依靠fun来调用这个函数对象,a在外部是不可见的。但是

可以在其内部使用,比如var fun=function a(){alert(a.name)}。

我们要时刻记住的是,函数是一个特殊的对象,他会有一个不

公开或不常用的属性叫name;比如你创建一个函数对象,如果

加了标识符,这个标识符就会成为他的name。比如你直接声明

一个函数,function a(){};那么你创建了一个函数对象,其name

属性叫a;另外在表达式中,比如var fun=function(){};fun只是对函数

对象的引用,这个函数对象是一个匿名函数,因此其name属性是

一个空字符串。而不是fun.


原创粉丝点击