函数声明和函数表达式在JavaScript中都是创建函数的方法,但它们之间有一些关键的区别。
函数声明
函数声明是使用function
关键字来定义的,并且它会被提升到其所在作用域的顶部。也就是说,不论函数声明在代码中的哪个位置,它都可以在整个作用域中被访问。
console.log(myFunction()); // 输出: "Hello, World!" function myFunction() { return "Hello, World!"; }
在上述代码中,尽管myFunction
在调用之后才被声明,但因为它是函数声明,所以它可以被成功调用。
函数表达式
函数表达式是使用function
关键字创建的,但不像函数声明那样被提升。函数表达式可以立即执行,也可以被赋值给一个变量,或者作为对象的属性。
console.log(myFunction()); // 输出: TypeError: myFunction is not a function var myFunction = function() { return "Hello, World!"; }; console.log(myFunction()); // 输出: "Hello, World!"
在这个例子中,第一次尝试调用myFunction
会导致错误,因为在这个时候myFunction
还没有被赋值。只有当函数表达式被赋值给myFunction
之后,myFunction
才能被成功调用。
此外,函数表达式也可以作为匿名函数使用,例如作为回调函数:
setTimeout(function() { console.log("Hello, World!"); }, 1000);
在这个例子中,我们创建了一个匿名函数并将其作为回调传递给setTimeout
函数。当setTimeout
的时间到达后,这个匿名函数将被执行。
总的来说,函数声明和函数表达式的主要区别在于它们的提升行为以及是否可以立即执行。函数声明会被提升到其所在作用域的顶部,而函数表达式则不会。函数声明只能被声明一次,而函数表达式可以被多次赋值或调用。