ES6——函数进阶1

函数
基本概念:
一段JavaScript代码,它只定义一次,但可能被执行或调用任意次。
函数的定义会包括一个称为形参(parameter)的标识符列表,这些参数在函数体中像局部变量一样工作。
函数调用会为形参提供实参的值。函数使用实参的值来计算返回值,除了实参之外,每次调用还会有一个另一个值(本次调用的下上文),即this关键字。
函数可以嵌套在其他函数中定义,从而可以访问它们被定义时所处的作用域的任何变量。
形成闭包。
函数定义构成:
一:函数名的标识符。
函数名称是函数声明语句中必需的部分,用途就像变量的名字,新定义的函数对象会赋值给这个变量。
二:一个圆括号。由标识符组成。
三:一对花括号。由JS语句组成。
函数定义:
1.声明语法

function add(num1, num2) {
  return num1 + num2;
}

2.函数表达式

let sub = function (num1, num2) {
  return num1 - num2;
};

声明语法和函数表达式的区别
以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用(函数声明整体会被提升到当前作用域的顶部,函数表达式也提升到顶部但是只有其变量名提升)
3.通过构造对象的形式
Function构造函数
这个构造函数接收任意多个字符串参数,最后一个参数始终会被当成函数体,而之前的参数都是新函数的参数。

let sum = new Function(
    "num1",
    "num2",
    "let result=num1+num2; return result;"
  );
//

不推荐使用这种语法来定义函数,因为这段代码会被解释两次:第一次是将它当作常规ECMAScript 代码,第二次是解释传给构造函数的字符串。这显然会影响性能。

***arguments对象***
一个类数组对象(但不是 Array 的实例),因此可以使用中括号语法访问其中的元素。
如,第一个参数是 arguments[0],第二个参数是 arguments[1]。
要确定接收到的参数个数,可以访问 arguments.length 属性。

function likes(name, fav1, fav2) {
console.log(${name}喜欢${fav1}、${fav2}。);
let output = ${name}喜欢;
let argCount = arguments.length;
for (let i = 1; i < argCount - 1; i++) {
output += ${arguments[i]}、;
}
output += ${arguments[argCount - 1]}。;
console.log(output);
}
likes(“小明”, “读书”, “篮球”);
likes(“小明”, “读书”, “篮球”, “游泳”, “骑车”);


***函数参数***
参数默认值
ES5写法:

function f1(name, age) {
name = name ? name : “User”;
age = age ? age : 0;
console.log(name, age);
}
f1();
f1(“Tom”);
ES6简化
function f2(name = “User”, age = 0) {
console.log(name, age);
}
f2();
f2(“Tom”);
常见问题:
function sum1() {
return Array.from(arguments).reduce((x, y) => x + y, 0);
}
let sum2 = () => {
return Array.from(arguments).reduce((x, y) => x + y, 0);
};
console.log(sum1(1, 2, 3), sum2(1, 2, 3));
箭头函数不支持arguments对象。
let sum3 = (…nums) => {
return nums.reduce((x, y) => x + y, 0);
};
console.log(sum3(1, 2, 3));
箭头函数支持剩余函数。
function f1(x, y, …nums) {
console.log(arguments);
console.log(nums);
}
f1(1, 2, 3, 4, 5, 6);
f1(1, 2);
arguments对象包含了剩余参数值。
剩余参数没有接收到实参值时,为空数组。
function f2(x, …nums, y) {
console.log(nums);
console.log(y);
}
f2(1, 2, 3, 4, 5);
剩余参数必须位于参数列表的末尾。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值