函数声明、函数表达式区别

2018-05-01  本文已影响8人  Allan要做活神仙

1)函数声明(Function Declaration);
// 函数声明

    function funDeclaration(type){
        return type==="Declaration";
    }

2)函数表达式(Function Expression)。
// 函数表达式

    var funExpression = function(type){
        return type==="Expression";
    }

上面的代码看起来很类似,感觉也没什么太大差别。但实际上,Javascript函数上的一个“陷阱”就体现在Javascript两种类型的函数定义上。下面看两段代码(分别标记为代码1段和代码2段):

1     funDeclaration("Declaration");//=> true
2     function funDeclaration(type){
3         return type==="Declaration";
4     }
1     funExpression("Expression");//=>error
2     var funExpression = function(type){
3         return type==="Expression";
4     }

用函数声明创建的函数funDeclaration可以在funDeclaration定义之前就进行调用;而用函数表达式创建的funExpression函数不能在funExpression被赋值之前进行调用。
为什么会这样呢?!这就要理解Javascript Function两种类型的区别:用函数声明创建的函数可以在函数解析后调用(解析时进行等逻辑处理);而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用。
代码1段JS函数等同于:

    function funDeclaration(type){
        return type==="Declaration";
    }
    funDeclaration("Declaration");//=> true

代码2段JS函数等同于:

var funExpression;
    funExpression("Expression");//==>error
    funExpression = function(type){
        return type==="Expression";
}
上一篇下一篇

猜你喜欢

热点阅读