ECMAScript 2021 中的函数和外部作用域

阅读时长 6 分钟读完

在 ECMAScript 2021 中,函数和外部作用域的概念得到了进一步的发展和完善。本文将详细介绍这些新特性,包括函数的默认参数、剩余参数、命名参数、函数的链式调用、箭头函数的 this 绑定、块级作用域内的函数声明、以及外部作用域的闭包等。同时,我们还将通过示例代码来说明这些特性的使用方法和指导意义。

函数的默认参数和剩余参数

在 ECMAScript 2021 中,函数可以设置默认参数和剩余参数。默认参数可以在函数定义时指定一个默认值,如果调用时没有传递参数,则会使用默认值。剩余参数可以将传递给函数的所有参数收集到一个数组中,并在函数内部使用。

下面是一个使用默认参数和剩余参数的示例代码:

在上面的示例代码中,我们定义了一个名为 sayHello 的函数,它有一个默认参数 name 和一个剩余参数 others。当调用时没有传递参数时,name 的默认值为 'World'others 的值为空数组。当传递了多个参数时,name 的值为第一个参数,others 的值为剩余的所有参数。

函数的命名参数

在 ECMAScript 2021 中,函数还可以使用命名参数。命名参数可以让函数的参数更加清晰明了,可以使用参数名来指定传递的参数,而不用依赖参数的位置。

下面是一个使用命名参数的示例代码:

在上面的示例代码中,我们定义了一个名为 printUserInfo 的函数,它接受一个对象作为参数,这个对象包含 nameage 两个属性。在函数内部,我们使用解构赋值的方式将 nameage 的值提取出来,并输出到控制台。

函数的链式调用

在 ECMAScript 2021 中,函数可以进行链式调用。链式调用可以让代码更加简洁,同时也可以让代码更加易读。

下面是一个使用链式调用的示例代码:

-- -------------------- ---- -------
----- ------ - -
  ----- --------
  ---- ---
  ---------- -
    ------------------- -- ---- -- ------------- --- ----------- ----- -------
    ------ -----
  --
  -------- -
    --------------------
    ------ -----
  -
--

--------------------------- -- --------- -- ---- -- ------ --- -- ----- ---- ----

在上面的示例代码中,我们定义了一个名为 person 的对象,它有两个方法 sayHellosayBye,这两个方法都返回 this,也就是对象本身。在调用这两个方法时,我们可以通过链式调用的方式来简化代码。

箭头函数的 this 绑定

在 ECMAScript 2021 中,箭头函数的 this 绑定得到了改进。在箭头函数中,this 的值将继承自父级作用域,而不是在函数被调用时才确定。

下面是一个使用箭头函数的示例代码:

-- -------------------- ---- -------
----- ------ - -
  ----- --------
  ---- ---
  --------- -- -- -
    ------------------- -- ---- -- ------------- --- ----------- ----- -------
  -
--

------------------ -- --------- -- ---- -- ---------- --- --------- ----- ----

在上面的示例代码中,我们定义了一个名为 person 的对象,它有一个箭头函数 sayHello。在箭头函数中,this 的值继承自父级作用域,也就是全局作用域,因此在输出的结果中,name 和 age 的值都是 undefined。

块级作用域内的函数声明

在 ECMAScript 2021 中,函数声明可以在块级作用域内进行。在块级作用域内声明的函数只能在该作用域内使用,而在外部作用域中是无法访问的。

下面是一个使用块级作用域内的函数声明的示例代码:

在上面的示例代码中,我们在 if 语句块中声明了一个名为 sayHello 的函数。在该作用域内,我们可以正常调用该函数。但是在函数外部,我们无法访问该函数,因为它的作用域仅限于该块级作用域内。

外部作用域的闭包

在 ECMAScript 2021 中,函数可以形成闭包。闭包可以让函数访问外部作用域中的变量和函数,即使在函数被调用后,外部作用域已经销毁。

下面是一个使用闭包的示例代码:

-- -------------------- ---- -------
-------- --------------- -
  --- ----- - --
  ------ ---------- -
    --------
    ------------------- -----------
  --
-

----- ------- - ----------------
---------- -- --------- -
---------- -- --------- -

在上面的示例代码中,我们定义了一个名为 createCounter 的函数,它返回一个闭包函数。在闭包函数中,我们可以访问外部作用域中的 count 变量,并对其进行修改。每次调用闭包函数时,count 的值都会增加,并输出到控制台。

总结

在 ECMAScript 2021 中,函数和外部作用域的概念得到了进一步的发展和完善。函数可以使用默认参数、剩余参数、命名参数、链式调用和箭头函数的 this 绑定等特性,同时函数声明也可以在块级作用域内进行。外部作用域的闭包也可以让函数访问外部作用域中的变量和函数,即使在函数被调用后,外部作用域已经销毁。这些特性可以让我们编写更加简洁、易读、灵活和高效的代码。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65cb5a19add4f0e0ff50c82e

纠错
反馈