JavaScript进阶函数的复习

目录

函数提升

函数参数

剩余参数

扩展-展开运算符

箭头函数

函数的this指向

严格模式

高阶函数

闭包

递归

函数作为参数和返回值


函数提升

函数提升是一个有趣的现象,它允许我们在函数声明之前调用它们。这在编写代码时提供了更大的灵活性,尤其是在处理回调函数或者异步编程中非常有用。函数提升只发生在相同作用域的函数之间,而且函数表达式不具有提升现象。

console.log(add(1, 2));
function add(a, b) {
  return a + b;
}

函数参数

函数参数的传递在JavaScript中是通过 arguments 对象实现的。这是一个内置的伪数组,它包含了对函数所有参数的引用。在实际开发中,我们常常使用 arguments 来处理不定数量的参数。

function getSum() {
  let sum = 0;
  for (let i = 0; i < arguments.length; i++) {
    sum += arguments[i];
  }
  console.log(sum);
}
getSum(1, 2, 3);

剩余参数

剩余参数的语法是使用 ... 来表示接受任意数量的参数。这使得函数可以有意识地忽略掉不需要的参数。

function curry(...args) {
  return function(next) {
    return args.concat(next);
  };
}
const curryAdd = curry(1, 2);
console.log(curryAdd(3)); // 输出 [1, 2, 3]

扩展-展开运算符

扩展-展开运算符 ... 可以用来将数组或其他可迭代对象的元素展开到数组中。

const arr = [1, 2, 3];
console.log(...arr); // 输出 1 2 3

箭头函数

箭头函数是ES6中引入的一个新特性,它可以让我们以更简洁的方式书写函数。

// 普通函数
function greet() {
  console.log('Hello World');
}
// 箭头函数
const greetArrow = () => console.log('Hello World');
greetArrow();

函数的this指向

在JavaScript中,函数的 this 指向是根据函数的调用方式决定的。通常情况下,函数的 this 指向的是全局对象 window。如果我们想在回调函数中使用 this 指向函数本身,可以使用 Function.prototype.bind() 方法。

function greet() {
  console.log('Hello World');
}
greet.bind(greet)(); // 输出 Hello World

严格模式

严格模式可以通过在函数体内添加 "use strict" 语句来开启。在严格模式下,有一些新的限制和行为改变,比如要求所有变量必须使用 var 声明,否则会导致错误。

function inStrictMode() {
  "use strict";
  console.log("This function is running in strict mode.");
}
inStrictMode();

高阶函数

高阶函数是指接受其他函数作为参数或将函数作为返回值的函数。

function apply(func, args) {
  return func.apply(null, args);
}
const applyDiv = apply(/,/);
console.log(applyDiv([1, 2, 3])); // 输出 1 2 3

闭包

闭包是指有权限访问另一个函数作用域中变量的函数。闭包的作用是可以在函数外部访问函数内部的局部变量。

function outer() {
  let count = 0;
  return function inner() {
    console.log(count);
  };
}
const closure = outer();
closure();

递归

递归是指函数自己调用自己。递归可以解决一些特定的问题,比如阶乘计算、树遍历等。

function factorial(n) {
  if (n == 0) {
    return 1;
  }
  return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出 120

函数作为参数和返回值

函数可以作为其他函数的参数和返回值。这在设计模块和组件时非常有用。

function map(array, callback) {
  return array.map(callback);
}
const mapped = map([1, 2, 3], function(num) {
  return num * 2;
});
console.log(mapped); // 输出 [2, 4, 6]
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值