美文网首页
函数的扩展(笔记)

函数的扩展(笔记)

作者: 灰灰_82a6 | 来源:发表于2019-07-02 13:11 被阅读0次

默认值

1.函数的参数可以设置默认值

function log(x, y = 'World') {
  console.log(x, y);
}

2.length
返回没有指定默认值的参数长度。

(function (a, b, c = 5) {}).length // 2

作用域

参数如果有默认值,函数在声明和初始化的时候,参数会形成一个局部作用域,等初始化结束,这个作用域就会消失。

//参数y = x形成一个单独的作用域。
//这个作用域里面,变量x本身没有定义,所以指向外层的全局变量x。
//函数调用时,函数体内部的局部变量x影响不到默认值变量x。
let x = 1;

function f(y = x) {
  let x = 2;
  console.log(y);
}
f() // 1

rest参数

1.语法为...变量名 ,实际上就是扩展运算符。
2.rest参数之后就不能再有其他参数了。

function add(a,...values) {
    // a为2
    // values获取剩余的参数 [5,3]
}
add(2, 5, 3) 

3.函数的length属性,不包括 rest 参数。上面的函数,输出add.length结果为1。

4.arguments对象不是数组,而是一个类似数组的对象。而rest参数就是一个真正的数组。

严格模式

es6中不能在函数内部显式设定为严格模式。

// 报错
function doSomething(a, b = a) {
  'use strict';
  // code
}

name属性

1.获取函数的名字。
2.如果是一个命名函数赋值给一个变量,那么在es5中会返回空字符串,而 ES6 中会返回实际的函数名。

var f = function () {};
// ES5
f.name // ""
// ES6
f.name // "f"

3.如果是把一个有名字的函数赋值给变量,那么es5中和es6中返回的结果都是函数原本的名字。

const bar = function baz() {};
// ES5
bar.name // "baz"
// ES6
bar.name // "baz"

箭头函数

1.使用=>定义箭头函数

var f = v => v;
//等同于
var f = function (v) {
  return v;
};

2.如果只有没有参数或者有多个参数,就加一个()

//没有参数
var f = () => 5;
//多个参数
var sum = (num1, num2) => num1 + num2;

3.代码块如果多于一条语句,就使用{}包裹

var sum = (num1, num2) =>{ num1 + num2;num1 - num2};

注意:由于大括号被解释为代码块,如果函数返回一个对象,记得包裹一个()

let getTempItem = id => ({ id: id, name: "Temp" });

4.如果箭头函数只有一行语句,且不需要返回值,可以采用下面的写法,就不用写大括号了。

//void 让函数不再return
let fn = () => void doesNotReturn();

箭头函数使用注意点

1.箭头函数没有自己的作用域,所以它里面的this指向的就是箭头函数定义时所在对象。
2.不可以当作构造函数,也就是说,不可以使用new命令。
3.不可以使用arguments对象,该对象在函数体内不存在。
4.不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

相关文章

网友评论

      本文标题:函数的扩展(笔记)

      本文链接:https://www.haomeiwen.com/subject/nvucoqtx.html