函数表达式(Function Expression):将函数定义为表达式语句(通常是变量赋值,也可以是自调用形式)的一部分。函数表达式可以是命名的,也可以是匿名的。可以没有函数名,常被成为匿名函数,如果有,函数名也只存在自身函数作用域,并且函数表达式不能以“function”开头,函数表达式可以存储在变量或者对象属性中。
函数声明(Function Declaration):是一种独立的结构,它会声明一个具名函数,并必须以function开头。且函数声明会进行函数提升,使它能在其所在作用域的任意位置被调用,即后面的代码可以将此函数通过函数名赋值给变量或者对象属性。
Function()构造器:使用Function()构造器 函数,不推荐。
//Function()构造器
var f =new Function()
// 函数表达式
var f = function() {
console.log(1);
}
// 函数声明
function f (){
console.log(2);
}
console.log(f())
//1
因为函数声明优先级高于变量声明,变量提升,变量声明在后,以最后声明值为结果,所以是1。
怎么区分函数声明和函数表达式:
表面上,以function开头进行声明,并且含有函数名,一定是函数声明。
内在的,
函数提升:就是指允许先调用函数,再进行声明,因为声明会自动提升至调用前面执行。函数声明,会将整个函数进行提升.而函数表达式则不会提升,它是在引擎运行时进行赋值,且要等到表达式赋值完成后才能调用。
函数表达式是可以没有函数名的,如果有,它的函数名也只存在于自身的作用域,var f = function fun(){console.log(fun)}其他地方是没有的.这也避免了全局污染,也方便递归.
————————————————
版权声明:本文为CSDN博主「阿留申低压」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35415307/article/details/84643831