函数声明与函数表达式的区别

简介: 函数声明与函数表达式的区别

函数声明和函数表达式在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的时间到达后,这个匿名函数将被执行。

总的来说,函数声明和函数表达式的主要区别在于它们的提升行为以及是否可以立即执行。函数声明会被提升到其所在作用域的顶部,而函数表达式则不会。函数声明只能被声明一次,而函数表达式可以被多次赋值或调用。

相关文章
uniapp的touchstart与click
uniapp的touchstart与click
757 0
|
前端开发 搜索推荐 UED
解密前端路由: hash模式vs.history模式
解密前端路由: hash模式vs.history模式
|
Web App开发 监控 JavaScript
|
小程序 开发者
HBuilderX运行uniapp到微信开发者工具常见报错
HBuilderX运行uniapp到微信开发者工具常见报错
2612 0
|
API
JDK8函数式接口之BiConsumer
JDK8函数式接口之BiConsumer
332 0
|
移动开发 缓存 前端开发
深入理解前端路由:原理、实现与应用
本书《深入理解前端路由:原理、实现与应用》全面解析了前端路由的核心概念、工作原理及其实现方法,结合实际案例探讨了其在现代Web应用中的广泛应用,适合前端开发者和相关技术人员阅读。
|
开发工具 git 开发者
git rebase的使用
通过这些思维导图和分析说明表,您可以更直观地理解Git rebase的概念、用法和应用场景。希望本文能帮助您更高效地使用Git rebase,提高代码管理的效率和质量。
2328 13
|
前端开发 JavaScript Java
一文带你了解和使用js中的Promise
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,正向全栈进发。如果我的文章对你有帮助,请关注我,将持续更新更多优质内容!🎉🎉🎉
708 0
一文带你了解和使用js中的Promise
|
缓存 Java
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
这篇文章详细介绍了Java中线程的四种初始化方式,包括继承Thread类、实现Runnable接口、实现Callable接口与FutureTask结合使用,以及使用线程池。同时,还深入探讨了线程池的七大参数及其作用,解释了线程池的运行流程,并列举了四种常见的线程池类型。最后,阐述了在开发中使用线程池的原因,如降低资源消耗、提高响应速度和增强线程的可管理性。
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
|
JavaScript 前端开发 UED
小白请看! 大厂面试题 :如何用JS实现瀑布流
小白请看! 大厂面试题 :如何用JS实现瀑布流