您的位置:首页 > 其它

函数声明与函数表达式

2016-07-23 22:26 351 查看
1.什么是函数声明,函数表达式

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

函数表达式:function 函数名(){}。函数名可写可不写。写出来的,就是命名函数表达式,不写的就是匿名函数表达式

例子:

function aaa(){};这就是函数声明

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);}();//函数表达式可以,结果弹出1

~function aaa(){alert(1);}();//函数表达式可以,结果也弹出1



(2)函数声明可以被提前解析出来

如下面的例子:在火狐浏览器中弹出的是1,但是在IE浏览器中弹出的是2,但是函数表达式就不存在这样的问题了。所以在这种情况下要用函数表达式。

if(true){
function aaa(){
alert(1);
}
}
else{
function aaa(){
alert(2);
}
}

aaa();


利用函数表达式:

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

a();//用aaa();可以吗?no!


这时候弹出的都是1.

那么问题来了,为啥不可以用aaa();因为这个aaa()在外面调用的话,是找不到的,但是在内部是可以找到的。

对于函数表达式,不要用;

var a=function aaa(){
alert(1);
alert(typeof aaa);
}
aaa();


结果显示



var a = function aaa(){
alert(1);
alert(typeof aaa);  //内部是可以找到的
}

a();

/*aaa();  //外面是找不到的*/




总结:

函数声明与函数表达式的区别? 

答案:在Javscript中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。(函数声明提升)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: