js中的函数声明和函数表达式的区别

一、声明与表达式的格式

1.1 声明式的格式:

函数声明: function 函数名(){}

例子:

function aaa(){}  // 函数声明

1.2 表达式的格式:

函数表达式: function 函数名(可写可不写)(){} : 分别代表:命名函数表达式,匿名函数表达式

例子:

var a = function aaa(){} // 函数表达式
var a = function(){} // 函数表达式
(function aaa(){}) // 函数表达式
~function aaa(){}
-function aaa(){}
+function aaa(){}
!function aaa(){}  

二、区别

2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以。

也就是说,函数表达式可以通过直接加()来执行这个函数

如:

function aaa(){alert(1)}(); // 这是不可以的  

但是,如果是函数表达式

var a = function aaa(){alert(1)}(); // 可以的
~function aaa(){alert(2)}();  

2.2 函数表达式可以被提前解析出来

看下面例子:这两个例子中,执行结果的不一样,可以看出函数表达式是提前被解析出来的。
如果需要通过判断来调用不同函数(函数名相同),最好使用函数表达式

if(true){
    function aaa(){
        alert(1);
    }
}else{
    function aaa(){
        alert(2);
    }
}
aaa(); //2  
if(true){
    var a = function aaa(){
        alert(1);
    }
}else{
    var a = function aaa(){
        alert(2);
    }
}
a(); //1  

2.3 命名函数表达式跟匿名函数表达式的区别

看例子:

var a = function aaa(){
    alert(1);
    alert(typeof aaa); // 内部可以找到
}
a();
aaa(); // 外部找不到  
posted @ 2016-11-21 15:19  hp柠檬茶  阅读(1710)  评论(0编辑  收藏  举报