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

针对“深入理解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实现支付10秒倒计时

    下面我将为您详细讲解“javaScript实现支付10秒倒计时”的完整攻略。 确定页面结构和样式:在html页面中添加一个倒计时元素,例如一个div,然后在css中为该div添加样式,例如指定字体、字号、颜色、高度、宽度等属性。 编写倒计时函数:使用JavaScript编写倒计时函数,可以使用setInterval方法运行每1秒,倒计时的初始值为10秒。在每…

    JavaScript 2023年6月11日
    00
  • js将json格式的对象拼接成复杂的url参数方法

    当我们需要向服务器发送一个API请求时,通常会将参数拼接在URL的末尾,这些参数可能来自于用户输入、配置文件、API返回的数据等。而如果参数很多或者有多层嵌套结构,手动拼接URL会变得非常麻烦。这时候,可以使用JavaScript将JSON格式的对象拼接成复杂的URL参数字符串。 方法一:手写递归函数 以下是手写递归函数的示例代码: function bui…

    JavaScript 2023年5月27日
    00
  • JavaScript预编译和执行过程详解

    JavaScript预编译和执行过程详解 在JavaScript中,代码的执行过程涉及到了预编译和执行两个重要步骤。本篇攻略将会详细讲解这两步骤的具体内容,以及他们的执行顺序和影响。 预编译 在JavaScript中,当一段代码被执行之前,它会先进行预编译,即将所有变量的声明提前到当前作用域的顶部,也称为变量提升。这个过程是在代码执行之前自动完成的。 变量提…

    JavaScript 2023年5月27日
    00
  • javascript 闭包详解及简单实例应用

    JavaScript 闭包详解及简单实例应用 在 JavaScript 中,闭包是一个重要的概念,也是一个令人困惑的概念。理解闭包的概念和用法,可以大幅提高你的 JavaScript 编程水平。在这篇文章中,我们将介绍什么是闭包,为什么需要它们,并且演示几个具体的使用场景。 什么是闭包? 闭包是指在函数内部定义的函数,该函数可以访问在外部函数作用域中声明的变…

    JavaScript 2023年6月11日
    00
  • AngularJS 单元测试(一)详解

    下面是对于“AngularJS 单元测试(一)详解”的完整攻略: 什么是单元测试 单元测试是软件开发流程中的一种测试方法,它可以对一个软件系统、组件或单元进行测试,以确认其是否满足设计目标和要求。它可以提供反馈和验证设计过程的正确性。 单元测试的主要目的是在开发过程中检测代码的正确性,及时发现并解决错误。相比手动测试,单元测试可以更早地检测到错误,提高开发效…

    JavaScript 2023年6月10日
    00
  • js本身的局限性 别让javascript做太多事

    JavaScript(以下简称JS)是Web前端开发必不可少的一门语言,它具有动态性、灵活性和可移植性等优点。但是,JavaScript本身存在着一些局限性,它不能完全替代其他语言的功能,也不能处理所有的任务。因此,在开发过程中需要注意不要过度依赖JS,否则会给项目带来一些潜在的风险和问题。 JS本身的局限性 在Web应用程序中,JS主要用于前端的交互效果和…

    JavaScript 2023年5月28日
    00
  • JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法

    JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法主要依赖于浏览器提供的File API。该API提供了File对象和FileReader对象,可以让我们通过JavaScript读取本地文件并进行上传。下面是实现该功能的步骤: 在HTML页面中添加上传文件的表单元素,例如: <form> <input type=&qu…

    JavaScript 2023年5月27日
    00
  • js实现精确到秒的倒计时效果

    实现精确到秒的倒计时效果,需要以下几个步骤: 1. 获取时间戳 首先,我们需要获取当前时间的时间戳(单位为毫秒),可以使用JavaScript内置的Date.now()方法获取到当前的时间戳,例如: const now = Date.now(); 2. 计算倒计时时间 接下来,需要通过时间戳计算出倒计时结束的时间。假如需要倒计时10秒钟,可以使用如下代码计算…

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