JavaScript中var functionName = function() {}与function functionName() {}的区别
大家好!我是一名前端开发新手,遇到了一个困惑。在不同的项目和教程中,我看到了两种声明函数的方式:
```javascript
// 方式1:Function Expression(函数表达式)
var myFunc = function() {
console.log("Hello from expression!");
};
// 方式2:Function Declaration(函数声明)
function myFunc() {
console.log("Hello from declaration!");
}
```
乍一看它们做的是同一件事。但当我开始编写更复杂的代码时,我注意到了一些奇怪的行为。例如,如果我在函数声明之前调用它,一种方式有效,而另一种会报错:
```javascript
// 这样能工作
sayHello(); // 输出 "Hello!"
function sayHello() {
console.log("Hello!");
}
// 这样会报错
sayGoodbye(); // TypeError: sayGoodbye is not a function
var sayGoodbye = function() {
console.log("Goodbye!");
};
```
为什么会这样?这两种方式之间有什么根本区别?