JavaScript函数属性,方法,ES6拓展内容总结(箭头函数使用,rest参数)
引言
函数在js中也是一个对象,所以它也是有着自己的属性和方法的,了解它们能更好的使用函数。
// 各种样子的函数
function foo() {}
function foo(a) {}
function foo(a = 1) { return a }
function foo([a,b]) { return a + b }
function foo(a,...args) {return a}
var foo = function() {};
var foo = function f() {};
() => {}
属性及方法
name length属性
// name函数的名称
foo.name //foo
var f = function foo() {} //foo
// length函数的参数长度
// 当参数有默认值是,length会不准确
// 当有默认值的参数是第一时,就不会继续计数了
function foo1(a,b) {}
foo1.length // 2
function foo2(a,b=1) {}
foo2.length // 1
function foo3(a=1,b,c) {}
foo3.length // 0
toString()
参数
arguments对象
arguments是函数的参数对象,是一个类数组对象,可以获取或者修改函数的参数,获取的是传入的参数的信息,不是定义的参数,当在‘严格模式’下不能修改。
function foo(a) {
arguments[0] = 1;
return a;
}
foo(5) // 1
foo(2,3,5) // argumetns.length == 3
指定默认值
函数的参数也是可以指定默认的
function foo(a = 1, b = 2) {}
// 默认值也可以是表达式
// 表达式是惰性求值的,也就是用到了才会求
let x = 2;
function foo(a = x + 1) { return a }
foo() // 3
x = 4
foo() // 5
参数解构赋值
rest参数
如函数的参数的个数是不确定的可以使用...变量名参数
function foo(...args) { return args }
foo(1,23,4) // [1,23,4]
//可配合使用
function foo(a,...args) {}
//不用rest参数实现rest效果
function foo() {
return [].slice.call(arguments).sort();
}
注:rest参数只能是最后一个参数,否则报错
箭头函数
箭头函数让函数写起来更加的高效,优雅,但是也是有些要注意的地方。
// 没有参数需要小括号()
() => {}
// 一个参数可以省略小括号()
a => { retrun a }
// 函数语句只有一条是可以省略大括号,也是会自动的return
a => a
// 如果加了大括号,需要返回就应手动return,否则会return一undefined
// 原因,大括号被解释为代码块,而不是函数的语句,函数就没有return
a => { return a }
a => { a } // undefined
a => { id:1, age:12 } //报错SyntaxError
a => ({ id:1, age:12 }) //{ id:1, age:12 }
a => { return { id:1, age:12 } } //{ id:1, age:12 }
// 不return可以写
a => void doesNotReturn()
注:
- 箭头函数的
this指向的是定义所在的对象,而不是使用所在的对象,所以需要使用this需要慎重。this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。 - 箭头函数没有
arguments对象。 - 箭头函数不能用作当构造函数,所以
new箭头函数会报错。 - 不能使用
yield命令。
尾调用优化
函数在调用是会生成调用记录(调用帧),在有尾调用时,会为当前函数之前添加尾调用函数的调用帧。如果函数嵌套调用且都是尾调用,就会有连续的调用帧,由于尾调中的用不依赖外层的内容,所以,尾调用优化就会在调用时保留内层调用帧。如此将能节省调用时间和内存。
function foo() {
let a = 2;
let b = 4;
return g(a + b);
}
f();
// 等同于
function f() {
return g(6);
}
f();
// 等同于
g(6);
JavaScript函数属性,方法,ES6拓展内容总结(箭头函数使用,rest参数)的更多相关文章
- ES6入门五:箭头函数、函数与ES6新语法
箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...
- 石川es6课程---4、箭头函数
石川es6课程---4.箭头函数 一.总结 一句话总结: 相当于函数的简写,类似python lambda 函数,先了解即可 let show1 = function () { console.log ...
- ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))
1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...
- JavaScript ES6 Arrow Functions(箭头函数)
1. 介绍 第一眼看到ES6新增加的 arrow function 时,感觉非常像 lambda 表达式. 那么arrow function是干什么的呢?可以看作为匿名函数的简写方式. 如: var ...
- ES6系列_7之箭头函数和扩展
1.默认值 在ES6中给我们增加了默认值的操作相关代码如下: function add(a,b=1){ return a+b; } console.log(add(1)); 可以看到现在只需要传递一个 ...
- es6新特性之箭头函数
<script> { // es3,es5 var evens = [1, 2, 3, 4, 5]; var odds = evens.map(function (v) { return ...
- ES6新特性之箭头函数与function的区别
写法不同 // function的写法 function fn(a, b){ return a+b; } // 箭头函数的写法 let foo = (a, b) =>{ return a + b ...
- 【面试题】ES6语法五之箭头函数
ES6特性=>. function foo(x, y){ return x + y } var foo = (x, y) => x + y 包括一个参数列表(零个或多个参数,如果参数不是一 ...
- ES6必知,箭头函数与普通函数的区别。
1. 箭头函数没有prototype(原型),所以箭头函数本身没有this let a = () =>{}; console.log(a.prototype); // undefined 2. ...
- 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值
遇到一个需要向匿名函数传递循环控制变量的问题,我受到园子里这篇文章的启发[笔记]js获取当前点击元素的索引,解决了这个问题.现在把代码贴出来,以防止自己忘记. if ($('#labModal').l ...
随机推荐
- 更智能的广告素材生成!看A/B测试如何驱动AIGC素材调优
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前言:AIGC大爆发,引发广告营销行业变革 ChatGPT等AI产品引发的AIGC大爆发引起了各行业的震动,其中以 ...
- 说说如何在Vue项目中应用TypeScript?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.前言 与link类似 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基 ...
- 2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。
2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 .每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里. ...
- linux系统执行 ifconfig命令ens33没有显示ip地址解决办法
问题背景 安装虚拟机(以ubuntu为例)因为重启或更新等原因导致,无法通过ssh连接到虚拟机,本地cmd窗口ping虚拟机ip发现无法ping通 启动本地虚拟机 发现ens33 位置没有显示 ip地 ...
- Fast多维数组
#include<iostream> #include<chrono> struct Timer { std::chrono::time_point<std::chron ...
- Python基础之:Python中的模块
目录 简介 模块基础 执行模块 模块搜索路径 dir 包 包的相对路径 简介 Python的解释环境是很好用,但是如果我们需要编写一个大型的程序的时候,解释环境就完全不够用了.这个时候我们需要将pyt ...
- JDK11的新特性:新的HTTP API
目录 简介 使用HTTP Client请求的基本流程 创建HTTP Client 创建HTTP Request 发送HTTP请求 异步HTTP请求 总结 JDK11的新特性:新的HTTP API 简介 ...
- OpenHarmony页面级UI状态存储:LocalStorage
LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例.LocalStorage也可以在UIAbility内,页面间共享 ...
- Docker 学习路线 3:安装设置 Docker Desktop 与 Docker 引擎指南
Docker提供了一个名为Docker Desktop的桌面应用程序,简化了安装和设置过程.还有另一个选项可以使用Docker引擎进行安装. Docker Desktop网站 Docker引擎 Doc ...
- Linux获取摄像头VID,PID的两种方式
第一种方式,是直接查询设备的vid.pid文件,来获取vid,pid 第二种方式,是查询设备信息,自己去解析对应的vid和pid 正常情况下,第一种方式就可以了,但是今天遇到一个ARM架构的kylin ...