Skip to content

js函数有哪几种声明方式?有什么区别?

参考答案:

表达式声明式 两种函数声明方式

  • 函数的声明式写法为:function test(){},这种写法会导致函数提升,所有通过function关键字声明的变量都会被解释器优先编译,不管声明在什么位置都可以调用它,但是它本身并不会被执行。
js
test(); // 测试
function test() {
  console.log("测试");
}
test(); // 测试
  • 函数的表达式写法为:var test = function(){},这种写法不会导致函数提升,必须先声明后调用,不然就会报错。
js
test(); // 报错:TypeError: test is not a function
var test = function() {
  console.log("测试");
};

二者的区别

javascript
//函数声明式
function greeting(){
      console.log("hello world");  
}
//函数表达式
var greeting = function(){
    console.log("hello world"); 
}
  1. 函数声明式变量会声明提前 函数表达式变量不会声明提前
  2. 函数声明中的函数名是必需的,而函数表达式中的函数名则是可选的
  3. 函数表达式可以在定义的时候直接在表达式后面加()执行,而函数声明则不可以。
javascript
function fun(){  
   console.log('我是一个函数声明式')  
}();   //unexpected token  

var foo = function (){  
    console.log('我是一个函数表达式')  
}();   //我是一个函数表达式
  1. 自执行函数即使带有函数名,它里面的函数还是属于函数表达式。
javascript
(function fun(){  
    console.log('我是一个函数表达式')  
})()  //我是一个函数表达式

因为函数只是整个自执行函数的一部分。

题目要点:

函数声明式写法

  • 使用 function 关键字声明函数,例如 function test(){}
  • 特点:
    • 函数提升:函数声明会被提升到作用域顶部,可以在声明之前调用。
    • 必须有函数名。

函数表达式写法

  • 将一个匿名函数赋值给变量,例如 var test = function(){}
  • 特点:
    • 不会提升:必须先声明后调用,否则会报错。
    • 函数名是可选的,通常用于匿名函数。

二者的区别

  1. 声明提升:函数声明会被提升,而函数表达式不会。
  2. 函数名:函数声明需要函数名,而函数表达式中的函数名是可选的。
  3. 立即执行:函数表达式可以在定义时直接后面加 () 立即执行,而函数声明不可以。
  4. 自执行函数:即使是带有函数名的自执行函数,它内部的函数仍然属于函数表达式。