深入理解javascript函数参数与闭包

yizhihongxing

针对“深入理解JavaScript函数参数与闭包”的攻略,我会先介绍一下函数参数的概念以及它们的类型和用法,然后再进行闭包的详细讲解和示例说明。

一、函数参数

函数参数是在函数定义时声明的,用于接受传递给函数的值。JavaScript中函数参数有两种类型:形式参数和实际参数。

1.1 形参和实参

函数定义时,使用括号包裹形参,形参不需要具体的值,其只是一个占位符,用于标识参数的类型或名称。函数在被调用时,使用实参对形参进行赋值,实参是实际传入的值。

示例:

function add(num1, num2) { // num1, num2为形参
  return num1 + num2;
}
add(1, 2); // 1, 2为实参

1.2 默认参数

在ES6中,你可以给函数的形参设置默认值。这样,当实参没有传入相应参数时,将会使用默认值。

示例:

function sayHi(name = 'default') { // name 设置默认值为'default'
  console.log(`Hello ${name}!`);
}
sayHi(); // 'Hello default!'
sayHi('Tom'); // 'Hello Tom!'

1.3 剩余参数

剩余参数可以用来代替函数当中需要的多个参数。

示例:

function sum(...args) { // 使用剩余参数...
  return args.reduce((a, b) => a + b);
}
sum(1, 2, 3, 4, 5); // 15, args = [1, 2, 3, 4, 5]

二、闭包

闭包是一个函数和其所在的环境组合而成的一个对象,该对象可以访问其定义时的环境中的变量和函数。这些变量和函数的引用被保存在闭包内,不会被垃圾回收机制回收掉。

2.1 闭包的形成

当一个嵌套的函数(内部函数)访问外部函数的变量时,闭包就形成了。下面是一个简单的示例:

function outer() {
  let a = 'hello';
  function inner() {
    console.log(a);
  }
  return inner;
}
let innerFn = outer();
innerFn(); // 'hello'

在上面的示例中,inner函数访问了外部的变量a,从而形成了闭包。

2.2 闭包的应用

闭包常用于保护变量以及封装函数。

保护变量:

function counter() {
  let count = 0; // count受到闭包保护
  return function() {
    return ++count;
  }
}
let inc = counter();
console.log(inc()); // 1
console.log(inc()); // 2
console.log(inc()); // 3

封装函数:

function createPerson(name) {
  let age = 0;
  return {
    getName() {
      return name;
    },
    getAge() {
      return age;
    },
    setAge(newAge) {
      age = newAge;
    }
  }
}
let person = createPerson('Tom');
console.log(person.getName()); // Tom
console.log(person.getAge()); // 0
person.setAge(20);
console.log(person.getAge()); // 20

在上面的示例中,createPerson函数返回一个对象,该对象包含几个方法,并使用闭包保护了age变量,同时也保护了name变量。

以上是“深入理解JavaScript函数参数与闭包”的一些内容,希望能够帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解javascript函数参数与闭包 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript unicode与GBK2312(中文)编码转换方法

    下面是详细讲解“javascript unicode与GBK2312(中文)编码转换方法”的完整攻略。 了解Unicode与GBK2312编码 在进行编码转换前,我们需要先了解所涉及的两种编码方式:Unicode和GBK2312。 Unicode是国际标准化组织制定的国际编码标准,它为世界上所有的字符规定了统一的编码,包括字母、数字、标点符号、各国文字等。U…

    JavaScript 2023年5月20日
    00
  • jsp+ajax发送GET请求的方法

    当需要在JSP页面中使用ajax发送GET请求时,可以参照以下步骤进行操作: 步骤一:引入jQuery库文件 使用ajax发送请求时需要引入jQuery库文件。可以在head标签中使用以下代码引入: <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js&quot…

    JavaScript 2023年6月11日
    00
  • js获取时间精确到秒(年月日)

    获取时间是日常开发中常见的操作,而对于一些特殊应用,我们需要获取更加精确的时间,例如获取时间精确到秒(年月日)。下面给出完整的攻略。 方法一:使用Date对象的方法 获取时间最简单和最常见的方法就是使用JavaScript内置的Date对象,其中getDate()方法、getMonth()方法、getFullYear()方法、 getHours()方法、ge…

    JavaScript 2023年5月27日
    00
  • JS小数运算出现多为小数问题的解决方法

    当进行JS小数运算时,经常会遇到精度丢失的问题,导致结果不准确,这是因为JS中采用IEEE754标准来表示数字,用64位二进制数来表示一个浮点数。由于数字太大或太小,无法用64位来完全表示,因此会出现精度丢失。 那么如何避免这个问题呢?下面介绍几个解决方法。 1. 使用第三方库decimal.js decimal.js是一个第三方库,用于处理JS中的小数计算…

    JavaScript 2023年6月11日
    00
  • JavaScript数字和字符串转换示例

    JavaScript 数字和字符串转换是开发过程中非常常见的操作之一。本攻略将带您了解如何在 JavaScript 中进行数字和字符串间的转换。 数字转字符串 在 JavaScript 中可以使用 toString() 方法将数字转换为字符串。 let num = 123; let str = num.toString(); console.log(type…

    JavaScript 2023年5月28日
    00
  • Js数组排序函数sort()介绍

    Js数组排序函数sort()介绍 简介 JavaScript中的数组有一个sort()方法可以对数组进行排序。sort()方法可以按照指定的排序规则进行排序。 语法 array.sort([compareFunction]) 其中,compareFunction是可选参数,用于指定排序的规则。如果没有指定参数,那么sort()方法会将数组元素按照Unicod…

    JavaScript 2023年5月27日
    00
  • Ajax发送和接收二进制字节流数据的方法

    发送和接收二进制字节流数据是通过Ajax传输数据的一种常见方式。下面是一整套完整的Ajax发送和接收二进制字节流数据的攻略。 准备工作 在发送和接收二进制字节流数据之前,你需要先准备好以下工作: 确保你的Web服务器能够正确处理二进制数据请求。可以通过查看服务器的文档或者咨询服务器提供商来确认。 确定好要发送或接收的二进制数据的格式和编码方式。常见的二进制数…

    JavaScript 2023年6月11日
    00
  • 在react中使用mockjs的方法你知道吗

    当我们需要模拟一个后端API接口,来测试前端代码的时候,可以使用mockjs这个库进行模拟数据。下面是在React中使用mockjs的方法: 1. 安装mockjs npm install mockjs –save-dev 2. 创建mock数据 我们可以在src目录下新建一个mock目录,然后在这个目录下再新建一个data.js文件。在这个文件中,就可以…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部