【深入理解ES6】函数

news/2024/7/11 1:51:36 标签: es6, 前端, ecmascript

箭头函数

这是 ES6 中引入的一个有趣的新特性。箭头函数,顾名思义就是一种使用箭头(=>)定义的新语法,与传统函数的差别如下:

  1. 没有this、super、arguments和new.target绑定,他们由外围最近一层非箭头函数决定。
  2. 不能通过New关键字调用。箭头函数没有 construct 方法,所以不能用作构造函数。
  3. 没有原型,所以不存在 prototype 属性。
  4. 不可以改变this绑定,函数内部的this值不可以被改变,在函数生命周期内始终保持一致。
  5. 不支持arguments对象,箭头函数没有arguments绑定,所以必须通过命名参数和不定参数两种形势访问函数的参数。
  6. 不支持重复命名参数,传统函数只有在严格模式下才不能有重复命名的参数。

箭头函数的语法:

//加法
var add = function(a,b){
    return  a+b;
}
var sum = (a,b)=>a+b;

//排序的比较器
var result = values.sort((a,b)=>a-b);

其中箭头函数的参数为 ( => )左边括号的内容,右边为返回值。

尾调用优化

尾调用优化是ES6引擎的优化。之前的循环调用中,每一个未用完的栈帧都会被保存在内存中,当调用栈变得过大时程序会出现问题,例如爆栈。

尾调用优化就是指函数作为另一个函数的最后一条语句被调用。

function doSomething(){
     return doSomethingElse();//尾调用
}

尾调用优化没有明确的语法,而是符合条件会自动优化。

在ES6中如果满足以下条件,尾调用不再创建新的栈帧,而是清楚并重要当前栈帧。(因为在ES5之前需要)

  1. 尾调用不访问当前栈的变量(函数不能是一个闭包)
  2. 在函数内部,尾调用是最后一条语句。
  3. 尾调用的结果作为函数值返回。

好处:
尾调用可以帮助函数保持一个更小的调用栈,从而减少内存的使用,避免栈溢出错误,当程序满足条件时,引擎会自动对其优化。

function factorial(n,p=1){
	if(n<=1){
		return 1*p;
	}else{
		let result = n*p;
		//优化后
		return factorial(n-1,result);
	}
}

无法优化的示例:

"use strict"
function doSomething(){
    //调用不在尾部无法优化.
    var Result = doSomethingElse();
    return Result;
}

function doSomething2(){
    var sum =1;
    fun = () =>num;

    //无法优化,闭包
    return func();
}

尾调用优化和函数的懒执行有异曲同工之妙,典型的案例就是斐波拉契数列。把时间复杂度从 N^2 下降到 N


http://www.niftyadmin.cn/n/5032728.html

相关文章

MATLAB算法实战应用案例精讲-【自动驾驶】栅格地图(附python、MATLAB和C++代码实现)

目录 前言 几个高频面试题目 点云地图和栅格地图的优劣对比 点云地图 栅格地图

网络安全攻防对抗之隐藏通信隧道技术整理

完成内网信息收集工作后&#xff0c;渗透测试人员需要判断流量是否出得去、进得来。隐藏通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输。 一、隐藏通信隧道基础知识 &#xff08;一&#xff09;隐藏通信隧道概述 一般的网络通…

自己记录微信小程序开发遇到的问题

在HBuilder X中【运行】--【小程序】--【运行设置】&#xff0c;小程序运行配置&#xff0c;将【微信开发者工具】的安装路径配置进去&#xff0c;首次运行会自动让你填写&#xff1b; 1、hbuildx运行到微信开发者工具报错 Error: Unbalanced delimiter found in string 错误…

华为云云耀云服务器L实例评测|部署功能强大的办公套件 ONLYOFFICE

华为云云耀云服务器L实例评测&#xff5c;部署功能强大的办公套件ONLYOFFICE 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 支持镜像1.3 优势技术 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 ONLYOFFICE3.1 ONLYOFFICE 介绍3.2 Docker 环境…

车载软件架构 —— AUTOSAR Vector SIP包(一)

车载软件架构 —— AUTOSAR Vector SIP包(一) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在…

区块链(3):区块链去中心化

1 点对点同步区块链的流程 流程图如下&#xff1a; 流程讲解&#xff1a; &#xff08;1&#xff09;连接节点 &#xff08;2&#xff09;向该节点请求最新区块 &#xff08;3&#xff09;请求到区块以后&#xff0c;根据返回的最新区块前置hash是否和我本身的区块hash相等…

H5 <blockquote> 标签

主要应用于&#xff1a;内容引用 标签定义及使用说明 <blockquote> 标签定义摘自另一个源的块引用。 浏览器通常会对 <blockquote> 元素进行缩进。 提示和注释 提示&#xff1a;如果标记是不需要段落分隔的短引用&#xff0c;请使用 <q>。 HTML 4.01 与 H…

解决虚拟机重启后ifconfig看不到IP的问题

目录 背景 解决方案 背景 虚拟机&#xff0c;桥接模式&#xff0c;启动后一切正常&#xff0c;但重启后发现终端连不上虚机了&#xff0c;也ping不到&#xff0c;最后检查发现&#xff0c;IP消失了&#xff0c;虚机没有IP了。 解决方案 不论是否重启&#xff0c;只要是看不…