优秀的编程知识分享平台

网站首页 > 技术文章 正文

解析JavaScript函数的多种写法(javascript函数和方法)

nanyue 2024-08-17 19:11:14 技术文章 14 ℃

在JavaScript代码中,很多人应该都会知道如何定义和调用函数。对于编写和维护测试浏览器JavaScript标准来说,这是一个十分常见的挑战,尤其是当一个新特性出现且与现有的函数语法有关联,或者扩展了现有函数的API时。有必要确保新的或被提议的语法和API是有效的,且对语言中的每一个现有变体都是有效的。本文对JavaScript中已经存在的函数语法格式的概述说明。

函数声明和表达式(旧方法):

最早的函数定义形式就是函数声明和函数表达式。前者是最初设计的一部分(1995)并出现在第一个版本的规范(1997年)中,后者是在第三个版本(1999年)引入的。我们可以从这些规范中提取三种不同的定义形式:

要注意的是匿名函数表达式可能仍然有一个“名称”。

Function构造器

当我们在讨论一种语言的“函数API”的时候,就已经开始讨论Function构造器。函数声明的语法形式可以被解释为函数构造器的API的“文字”形式。Function构造器为定义函数提供了一种方法:通过N个字符串参数指定函数参数和函数主体,(如下面的例子)最后一个字符串参数始终是函数主体(需要指出的是,这是一种动态求值形式,会有潜在的安全风险)。对于大多数情况来说,这种形式并不适合,因此它的使用非常稀少——但是自从第一个版本的ECMAScript以来,它就一直存在在JavaScript中了。

新方法:

自从ES2015推出以来,已经引入了几种新的语法形式。这些形式的变化是巨大的!

not-so-anonymous函数声明

这是一种新的匿名函数声明形式,如果你曾用过ES Modules,应该清楚这种语法。虽然它可能看起来与匿名函数表达式非常相似,但它实际上有一个默认名称,即“default”

这个“default”本身并不是有效的标识符,并且没有绑定在该匿名函数上。

方法定义:

对于下面这个例子,大家应该能很快发现它定义了匿名和命名函数表达式作为属性的值。注意,这些不是不同的语法形式。它们是之前讨论过的函数表达式的示例,是在初始对象时编写的。这种形式最初是在ES3中引入的。

在ES5中引入了访问器属性定义:

从ES2015开始,JavaScript提供了一个简单的语法来定义方法,这种语法包括文字属性名称和计算属性名称形式,以及访问器形式:

我们还可以使用这些新形式作为类声明和表达式中的原型方法的定义:

和定义静态方法:

生成器:

生成器有一种特殊的语法,除了箭头函数和定义setter / getter方法的时候不能添加之外,可以被添加在其他所有语法形式中。我们可以用其生成函数声明、表达式、定义,甚至构造函数。让我们把它们列出来:

Tags:

最近发表
标签列表