函数声明与函数表达式

什么是函数声明和函数表达式?

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

// 当你写名字的时候叫做命名函数表达式;如果没有名字,叫做匿名函数表达式
function 函数名(可写可不写)(){}

如何区分函数声明和函数表达式?

区分一个函数到底是函数声明还是函数表达式,要看这个函数在整个代码中的上下文:

// 这个写到了页面的最顶端:函数声明
function aaa(){}/

// 命名函数表达式
var a = function aaa(){}
// 匿名函数表达式
var a = function(){}

// 把一个函数放到一个括号中他也会变成一个函数表达式
(function aaa(){})//表达式

// 在前面加上一个位运算符,也是一个函数表达式
-function aaa(){}//表达式
~function aaa(){}//表达式
!function aaa(){}//表达式
+function aaa(){}//表达式 

二者的区别?

1:函数表达式可以直接后面加括号执行,而函数声明是不行的

//函数声明后面直接加括号是执行不了的
function aaa(){alert(123)}();

//函数表达式后面加括号是可以直接执行的
var a = function aaa(){alert(123)}();
~function aaa(){alert(456)}();

2:函数声明可以被提前解析出来,也叫做函数声明的预解析

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

aaa();

//上面的两个函数声明都会被提前预解析,其实这个 if 判断是在解析之后发生
//的动作,这样的话,在不同的浏览器下的结果是不一样的,在 ie 下是2;而在
//ff 下是1,在chrome 下也是1
//如果换成函数表达式

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

a();// 1

//所以我们在写程序的时候要想在不同的语句中执行不同的函数,一定不要用函数声明,要函数表达式

命名函数表达式和匿名函数表达式的区别?

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

//当我们写了一个有名函数表达式的时候,如果调用变量 a 这个是所有的浏览器都支持的
a();

// aaa();
//而当你直接调用函数的名字的话,在 ff 下报错,在 ie 下是可以的,也就是
//说 aaa 在函数外部是找不到的,所以我们一般是不推荐使用命名函数表达式的

一道面试题

(function aaa(){alert(1)})

aaa();// aaa is not defined

//有名函数表达式的名字在函数外面是找不到的

什么时候使用有名函数表达式?

// 当你在 debuge 的时候要使用有名函数表达式
function aaa(){
    return bbb();
}

function bbb(){
    debugger;
}

aaa();
//这个时候你在 dubugger 的时候就会一目了然,到底是哪个函数调用了那个函数,一眼就看出来了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值