es6学习笔记9--函数的扩展

前端开发 作者: 2024-08-25 23:10:01
函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,为了避免这个问题,通常需要先判断一下参数y是否被赋值,如果没有,再等于默认值。 ES6允许为函数的参数设置默认值,即直接写在参

基本用法

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

log('Hello') // Hello World
log('Hello','China')  Hello China
log('Hello','')  Hello
function foo(x = 5) {
  let x = 1;  error
  const x = 2;  error
}

与解构赋值默认值结合使用

function foo({x,y = 5}) {
  console.log(x,y);
}

foo({})  undefined,5
foo({x: 1})  1,5
foo({x: 1,y: 2})  TypeError: Cannot read property 'x' of undefined

参数默认值的位置

 例一
function f(x = 1,y) {
  return [x,y];
}

f()  [1,undefined]
f(2)  [2,undefined])
f(,1)  报错
f(undefined,1]

 例二
function f(x,z) {
   [undefined,5,undefined]
f(1)  报错
f(1,undefined,2]
function foo(x = 5,y = 6null)
 5 null

函数的length属性

(function (a) {}).length  1
(function (a = 5) {}).length  0
(function (a,b,c = 5) {}).length  2
(function(...args) {}).length  0
(function (a = 0,c) {}).length  1

作用域

var x = 1;

 x) {
  console.log(y);
}

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

f()  1
function throwIfMissing() {
  throw new Error('Missing parameter');
}

function foo(mustBeProvided = throwIfMissing()) {
   mustBeProvided;
}

foo()
 Error: Missing parameter
function foo(optional = undefined) { ··· }
 add(...values) {
  let sum = 0;

  for (var val of values) {
    sum += val;
  }

   sum;
}

add(2,3)  10
 arguments变量的写法
 sortNumbers() {
   Array.prototype.slice.call(arguments).sort();
}

 rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();
 报错
 f(a,...b,c) {
   ...
}
(function(a) {}).length  function(...a) {}).length  function(a,...b) {}).length   1

含义

console.log(...[1,2,3])
 1 2 3

console.log(1,...[2,3,4],5 1 2 3 4 5

[...document.querySelectorAll('div')]
 [<div>,<div>,<div>]

替代数组的apply方法

 ES5的写法
 f(x,1)"> ...
}
var args = [0,1,2];
f.apply( ES6的写法
];
f(...args);

扩展运算符的应用

 ES5
[1,1)">].concat(more)
 ES6
[1,...more]
 ES5
a = list[0],rest = list.slice(1 ES6
[a,...rest] = list
var dateFields = readDateFields(database);
var d = new Date(...dateFields);
[...'hello']
 [ "h","e","l","o" ]
'x\uD83D\uDE80y'.length  4
[...'x\uD83D\uDE80y'].length  3
var nodeList = document.querySelectorAll('div');
var array = [...nodeList];
 foo() {}
foo.name  "foo"
var func1 =  () {};

 ES5
func1.name  ""

 ES6
func1.name  "func1"
 foo() {};
foo.bind({}).name  "bound foo"

(function(){}).bind({}).name  "bound "
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68649.html