es6函数的扩展介绍(代码示例)

千雪小哥_1653

千雪小哥_1653

2019-03-19

2176人浏览

转载

本篇文章给大家带来的内容是关于es6函数的扩展介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

函数参数的默认值

我们都知道声明函数可以设置形参,但你有没有想过形参也可以直接设置默认值,我们接下来看看如何去写

代码

function f(x,y=2) {
    return x+y
}
console.log(f(2)) // 4

上面的小例子只是设置了一个y的默认值2,然后我们使用这个函数的时候,只传递了x的参数2,所以我们会得到4,如果我们给y传递参数1呢?我们会得到什么样的结果,继续看下面的例子

function f(x,y=2) {
    return x+y
}
console.log(f(2,1)) // 3

我们会得到3,因为你传递实参的话会替换默认值,更多的例子需要大家自己去实验!!!

function f(x,x,y=2) {
    return x+y
}
console.log(f(2,2, 1)) // 报错

上面的例子会报错,因为我们不能设置相同的参数

let x = 3
function f(x,y=x) {
    return x+y
}
console.log(f(2))

var x = 3
function f(x,y=x) {
    return x+y
}
console.log(f(2))

function f(x,y=x) {
    console.log(x,y) // 2 2
    var x = 3
    console.log(x,y) // 3 2
    return x+y
}
console.log(f(2)) // 5

上面三个例子是函数参数作用域的例子,我们来看一下第一个和第二个例子函数默认值会有一个自己单独的作用域,所以我们在外面声明修改的x是不会起作用的,但是第三个例子我们在函数内部修改x,我们可以看一看我们打印的值可以看的未声明之前我们的x,y都是2,这里没有变量提升,声明下面x则变成了3,y依旧不变,所以得到5

rest 参数

官方注解:ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中

代码

function f(...x) {
    console.log(x) // [1,2,3]
}
f(1,2,3)

上面的例子我们会得到一个数组,这正和它定义的一样它会把多余的变量一起放到一个数组里面

function f(arr,y,...x) {
    console.log(x)
}

function f(arr,...x,y) {
}

上面的两个例子第一个可以执行并可以得到自己想要的结果,第二个则会执行报错,因为rest参数只能放到最后一个参数位置使用

严格模式下rest如何去使用?

从Es5开始函数内已经可以定义严格模式了,但Es6规定函数参数默认值定义严格模式会报错,但也要看严格模式定义在局部还是全局

严格模式不懂的可以去看看了解
严格模式

代码

 function fn(a=5) {
   'use strict';
   console.log(a)
   }
   fn()

上面这个例子我们在函数内部设置了严格模式但是它并没有我们如期的那样返回结果,而是报错了。我们来看一看官方解释:函数内部的严格模式,同时适用于函数体和函数参数。但是,函数执行的时候,先执行函数参数,然后再执行函数体。也就是说在函数内部定义严格模式,函数参数是先执行的函数体后执行(不定义严格模式也是先执行函数参数),这样在函数体验证参数是否为严格模式则为不合理存在

javascript-pro
javascript-pro

专注现代 ECMAScript、异步编程、性能优化和全栈的 JavaScript 专家,适用于现代开发

下载

那我们该怎么避免这样的错误呢?
 代码

   'use strict';
   function fn2(a=5) {
       console.log(a)
   }
   fn2()
   
    function fn() {
   'use strict';
       return function (a=5) {
           console.log(5)
       }
   }
   fn()() // 5

我们可以在全局定义严格模式,或是在一个函数内部定义然后返回一个带参数的函数,这样就可以绕过执行函数参数,执行函数体的时候不会报错

name 属性

 官方注解: 函数的name属性,返回该函数的函数名  使用方式   函数名.name

代码

function a() {
}
console.log(a.name) // a

function b() {
}
console.log(b.name) // a

上面两个例子通过使用name属性我们会得到函数的名字,当然Es5也能使用,大家可以去尝试在Es6环境和Es5环境测试一下

箭头函数

  let fn = a => a
  console.log(fn(10)) // 10
  
  // 对比
  
  let fn1 = function (a) {
      return a
  }
  console.log(fn1(10)) //10
  
  let fn2 =  (a,b) => a+b
  console.log(fn2(1,2))
  
  // 对比
  
  let fn21 = function (a,b) {
      return a+b
  }
  console.log(fn2(1,2))

我们可以看看上面的箭头函数与Es5中我们常用书写的函数的区别,就是大大缩减英文字母的编写而且变得更简洁了,其实箭头函数和普通函数作用都差不多,而且简单易懂,可以相互嵌套,对于自己代码整洁度非常有帮主,鼓励大家多使用箭头函数,那么箭头函数也有几个注意点需要大家记住

  1. 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象(this指向固定)
  2. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误
  3. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替
  4. 不可以使用yield命令,因此箭头函数不能用作 Generator 函数(这个函数到最后咱们会提到这里看看就行)

尾调用

 通俗的解释:就是在函数中最后一步调用函数

代码

  let fn = () => {
  console.log(123)
  return () => 5
  }
  console.log(fn()()) // 123     5

尾递归

let fn = (a,b) => {
  if(a===b) return b
  console.log(1)
  return fn(a+1, b)
  }
  console.log(fn(1,5))

在函数内部最后一步进行递归调用本身,从而达到递归的效果

函数参数的尾逗号

Es7中允许函数形参最后一个带有逗号,以前都是不允许带有逗号的
  let fn = (a,) => {
      console.log(a)
  }
  fn(1)

上面一个例子我们在参数的后面加了一个逗号,执行结果之后发现可以正常运行,但是我在es6环境下也是不会报错的试了下es5也不报错,大家可以在去试试、

函数的扩展就到这里了,最主要需要我们学的就是箭头函和rest参数传值,以及严格模式下函数的运作

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript教程视频栏目!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

javascript

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

20

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

20

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

20

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

120

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

100

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

300

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习