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

news2024/11/18 18:30:49

1、函数定义

JavaScript 中定义函数最常用的方式是函数声明函数表达式。这两种技术非常相似,有时甚至难以区分,它们之间还是存在着微妙的差别。

JavaScript 定义函数的最基本方式是函数声明

在这里插入图片描述
函数声明必须独立,但也能够被包含在其他函数或代码块中

// 全局独立声明函数tom
function tom() { 
  return "tom here"; 
}
// 全局独立声明函数jerry
function jerry() { 
  // 在jerry函数体中声明函数hiddenTom
  function hiddenTom() { 
    return "jerry here"; 
  }
  return hiddenTom(); 
} 

函数表达式:

JavaScript中的函数是第一类对象,除此以外也就意味着它们可以通过字面量创建,可以赋值给变量和属性,可以作为传递给其他函数的参数或函数的返回值。

var a = 3;
myFunction(4); 

同样,在相同位置可以用函数字面量:

var a = function() {}; 
myFunction(function(){});

这种总是其他表达式的一部分的函数(作为赋值表达式的右值,或者作为其他函数的参数)叫作函数表达式。

函数声明和函数表达式除了在代码中的位置不同以外,还有一个更重要的不同点是:对于函数声明来说,函数名是强制性的,而对于函数表达式来说,函数名则完全是可选的。

2、函数声明面试题:

阅读下面的代码片段,根据函数类型进行分类(函数声明、函数表达式和箭头函数)。

// 1
numbers.sort(function sortAsc(a, b) {
  return a– b;
});
// 2
numbers.sort((a, b) => b– a);
// 3
function outer() {
  function inner() {}
  return inner;
}
// 4
(function() {})();
// 5
(function() {}());
// 6
(() => "Yoshi")();

答案写在评论中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

REST开发

REST风格一、简介优点REST风格二、使用三、注解PathVariableResponseBody、RequestParam和PathVariable区别应用快速开发一、简介 REST(Representational State Transfer),表现形式状态转换 传统风格资源描述形式 http://localhost/user/ge…

Smartbi电子表格软件集成的优势

Smartbi电子表格软件作为国内顶尖的企业报表工具,具有“真Excel”特色,直接用Excel作为设计器,仅需安装一个插件就可以解决众多报表难题。无需增加学习成本,学习一个新的设计器,更能解决Excel的取数、性能等问题&#…

Wireless M-Bus介绍-摘自OMS

Wireless M-Bus(wM-Bus或无线M-Bus)是成熟的Wired M-Bus(有线M-Bus)标准的后续增强。2003年(这里估计是资料错误,第一个无线M-Bus的标准是2013年的),EN 13757-4首次对其进行了描述(?)。该标准为M-Bus层模型…

Python 全栈系列216 APIFunc.Database启动流程

说明 上次做了一些改进,现在关注使用的流程。 内容 1 基础概念 能大约知道大致的几个部分有助于记忆操作步骤,以后这个项目的代号就是ABD了。 1 所有启动相关的代码全部封装在镜像apifunc_database_model1:v3,基于这个镜像就可以启动一个所有对应的服务流2 在Portal上有相关…

为WEB3 的GameFi行业爆发提供全新动力

WEB3 GameFi的突破口在2022年末Octopus Network Co-founder Louis指出,GameFi要完成2023年的全新爆发需要将所有权与经营权分离,所有用户共同参与由平台成长带来的市场红利,单一的Gamefi将会更加产品化,体验化,具备整合…

详解树状数组

前言树状数组或二叉索引树(Binary Indexed Tree),又以其发明者命名为 Fenwick 树。其初衷是解决数据压缩里的累积频率的计算问题,现多用于高效计算数列的前缀和、区间和。它可以以 O(logn) 的时间得到任意前缀和。并同时支持在 O(…

JVM线上问题定位命令

概述 本文主要介绍下平常可能会使用到的命令:jps、jinfo、jmap、jstat、jstack jps jps主要是查看Java进程号,有个Java进程号后面的命令也才能发挥作用。 jps -help可以列出jps支持的参数,大家可以试一下 jinfo jinfo后面跟jps打出来的…

nvm(node版本管理)

文章目录1 安装2 配置镜像,提高下载速度3 常用命令4 vue版本与node版本的依赖关系注意事项1 nvm use 报错1 安装 官方下载地址: https://nvm.uihtm.com/ 官网同时还给出了非常详细的指令文档。 下载windows版本的安装包,按照提示点击下一步…

网络通信Socket学习记录

网络通信Socket Socket socket起源于unix,而unix/linux基本思想就是一切皆文件,也称为文件描述符socket是对“open—write/read—close”的一种实现socket是对TCP/IP协议的一种封装,socket本身不是协议,通过socket才能使用TCP/I…

一站式轻监控轻运维系统nezha(上篇)

本文软件由网友 114514 推荐; 什么是哪吒监控 ? 哪吒监控 是自托管、轻量级服务器和网站监控运维工具,属于一站式轻监控轻运维系统,分主控端和被控端,主控端提供访问的面板,被控端就是需要监控的服务器。 准…

Python的集合(set)类型、None类型.....

Day07 数据类型(下) dict,字典类型,一个容器,元素必须是键值对 Set,集合类型,一个不允许重复&可变类型(元素可哈希) float,浮点类型,常见的小数 文章目录1.集合(se…

this和super的区别

0.定义区别this:是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 super:可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最 近的一个父类。…

docker镜像lasest具体是哪个版本

拿Nginx举例: 我们安装镜像Nginx时,假设使用的下面这样: docker pull nginx:latest 执行上面的命令后,最后得到:"Status: Downloaded newer image for nginx:latest" 已经下载最新的Nginx了。 那么问题来…

JUC并发编程之ArrayBlockingQueue的底层原理

作者简介:专注于研究Linux内核、Hotspot虚拟机、汇编语言、JDK源码、各大中间件源码等等喜欢的话,可以三连关注~ArrayBlockingQueue的介绍在JUC包下关于线程安全的队列实现有很多,那么此篇文章讲解ArrayBlockingQueue的实现原理。相对于Linke…

闲置vps出售流量赚钱

原理分析最近,一直在关注着vps赚钱这点事儿,今天就是填一下以前的坑。这里所说的出售流量,可能大家都听说过,把vps流量卖给别人获得一定的报酬。但是你要知道数据中心IP的流量是很便宜的,最贵的是住宅IP和移动流量。图…

别搜了!2023年PMP备考攻略全指南看这里就够了!

一、考试时间 PMP考试是一年四次的,一般在3月、6月、9月、12月份考试(考试时间一般为周六)。 所以如果有想法一定要在这个几个时间点之间备考准备哦。 二,报名流程 一般都是中英文两个官网都报名 1.英文报名 需要在PMI官方网…

Ubuntu救援模式emergency mode笔记

如果是磁盘自检出错,进入救援模式emergency mode,可以参考如下。chatgpt给出提示:如果Ubuntu磁盘自检出错,需要进入救援模式,可以以下步骤操作:在启动画面中,按下Shift键进入Grub菜单。选择「Ad…

Android精准开发——OKHTTP中拦截器原理及实现

1.前言 提到OKHttp大家都不陌生,OKHttp中的拦截器也在大家的项目中或多或少的被使用到,通常我们的使用是这样的 OkHttpClient client new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .addNetworkInterceptor(new Token…

SpringBoot 整合 mybatis-generator 插件

SpringBoot 整合 mybatis-generator 插件 mybatis-generator 插件 mybatis 相关依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.1</version> &…

Java学习笔记——接口

目录接口的定义和特点JDK8版本中接口成员的特点——默认方法和静态方法JDK9版本中接口成员的特点——私有方法类和接口的关系接口的定义和特点 JDK8版本中接口成员的特点——默认方法和静态方法 JDK9版本中接口成员的特点——私有方法 类和接口的关系