JavaScript高级程序设计(第3版)学习笔记8 js函数(中)

JavaScript高级程序设计(第3版)学习笔记8 js函数(中)主要围绕函数作用域、闭包、函数式编程和函数对象四大主题展开,下面分别做详细说明:

函数作用域

JavaScript中的函数作用域是通过函数定义时的位置来决定的,即内部函数可以访问外部函数中的变量和函数,而外部函数无法访问内部函数中的变量。通过这种作用域链的形式来维护作用域,每个函数被创建时都会自动创建一个内部属性Scope,其中保存了当前的作用域链。该作用域链是一个指针列表,每个指针指向一个变量对象(VO)或者全局对象(GO),作为当前代码的可执行环境。而函数中定义的变量会保存在函数执行环境(Activation Object)中。函数执行完毕后,它的执行环境会被销毁,内部定义的变量也就随之消失。

闭包

闭包是指有权访问另外一个函数作用域中的变量的函数,即使这个函数已经被执行完毕,也仍然可以使用其中的变量。闭包的实现方式是在外部函数中定义内部函数,并且内部函数中可以使用外部函数中的变量,从而形成一个闭包。在编程中,闭包常常用于封装变量和对象,以防止全局命名冲突,另外还可以用于事件处理器和回调函数等场景中使用。

下面是一个使用闭包实现计数器的示例:

function counter() {
  var count = 0;
  return function() {
    return ++count;
  };
}

var c1 = counter();
console.log(c1()); // 1
console.log(c1()); // 2

函数式编程

函数式编程(Functional Programming)是一种基于数学函数的编程风格,它强调使用纯函数(Pure Function)、函数组合和函数传递等概念。纯函数指的是输入相同的参数时,总是返回相同的结果,不会对外部环境产生任何副作用的函数。函数组合指的是将多个函数结合在一起,构成一个更加复杂的函数。而函数传递则是指将一个函数作为参数,传递给另外一个函数。

在JavaScript中,函数式编程可以借助于函数的高阶特性实现。常用的高阶函数包括map()、reduce()和filter()等。map()函数可以将一个数组映射成另外一个数组,reduce()函数可以将一个数组合并成一个值,filter()函数可以对一个数组进行筛选。

下面是一个使用map()和reduce()实现计算平均值的示例:

var numbers = [1, 2, 3, 4, 5];

var sum = numbers.reduce(function(prev, cur) {
  return prev + cur;
});

var avg = sum / numbers.length;

console.log(avg); // 3

函数对象

JavaScript中的函数也是一种对象(Function Object),它具有方法和属性。常用的函数对象方法包括call()、apply()和bind()等,这些方法都可以用来改变this关键字的指向,从而达到使用不同对象调用同一个函数的目的。

下面是一个使用call()方法实现继承的示例:

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function() {
  console.log(this.name);
};

function Dog(name, age) {
  Animal.call(this, name);
  this.age = age;
}

var dog = new Dog("旺财", 3);

dog.sayName(); // 报错,因为Dog没有继承Animal的原型

// 结合使用call()和Object.create()方法来实现继承
Dog.prototype = Object.create(Animal.prototype, {
  constructor: {
    value: Dog,
    enumerable: false,
    writable: true,
    configurable: true
  }
});

dog.sayName(); // 旺财

以上是JavaScript高级程序设计(第3版)学习笔记8 js函数(中)的完整攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript高级程序设计(第3版)学习笔记8 js函数(中) - Python技术站

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

相关文章

  • javascript学习笔记(八)正则表达式

    JavaScript学习笔记(八)正则表达式 什么是正则表达式? 正则表达式是一种高级的文本匹配工具,它允许您通过定制化的模式来识别文本中的特定字符和模式。使用正则表达式可以快速,简单地从大量的文本或数据中提取信息,这是数据分析、数据挖掘等领域中必备的技能。 正则表达式语法 正则表达式是由文本字符和特殊字符构成的文本模式。下面是一些基本的正则表达式语法: ^…

    JavaScript 2023年5月19日
    00
  • 基于javascript编写简单日历

    下面是详细的“基于JavaScript编写简单日历”的完整攻略。 Step 1:需求分析 在开始编写日历之前,我们需要对需求进行分析,以便能够更好地为用户提供服务。根据需求分析,我们需要实现以下功能: 显示当前的年份和月份; 显示当前月份的所有日期; 提供切换月份的功能。 Step 2:HTML布局 为了实现上述功能,我们需要先在HTML文件中编写一些基本的…

    JavaScript 2023年5月27日
    00
  • 在线数据库管理工具(db007) v1.5

    在线数据库管理工具(db007) v1.5 完整攻略 简介 在线数据库管理工具(db007) v1.5是一个在线管理数据库的开源工具,它提供了简单易用的用户界面,可以方便地进行数据库的增删改查等操作,支持多种主流数据库系统。 安装和部署 在线数据库管理工具(db007) v1.5是基于web的工具,可以直接通过浏览器访问使用,无需安装或部署。只需要将项目代码…

    JavaScript 2023年6月10日
    00
  • AngularJs表单校验功能实例代码

    下面是关于AngularJS表单校验功能的完整攻略。 什么是AngularJS表单校验功能? AngularJS表单校验功能是指将表单中的数据校验功能通过AngularJS框架实现,从而提供可靠的数据校验能力,增加应用程序的可靠性和安全性。利用AngularJS表单校验功能,可以简单而快速地添加表单校验功能,避免重复劳动和代码冗余。 AngularJS表单校…

    JavaScript 2023年6月10日
    00
  • 你必须知道的Javascript知识点之”单线程事件驱动”的使用

    单线程事件驱动是Javascript中很重要的一个概念,主要是指Javascript在执行过程中只有一个线程,并且所有的事件都是异步发生的,需要通过事件循环来保证执行顺序和避免阻塞。下面是单线程事件驱动的详细解释和使用攻略。 基础概念 Javascript是一门单线程语言,因为它的执行机制是按照代码顺序、一行一行地执行。但是在实际应用中,很多任务都是需要异步…

    JavaScript 2023年6月11日
    00
  • javascript Ajax获取远程url的返回判断

    Javascript Ajax获取远程Url的返回判断通常包括以下几个步骤: 1. 创建XMLHttpRequest对象 var request; if (window.XMLHttpRequest) { // 非IE浏览器 request = new XMLHttpRequest(); } else if (window.ActiveXObject) { …

    JavaScript 2023年6月11日
    00
  • AngularJs E2E Testing 详解

    AngularJs E2E Testing 详解 在开发应用程序的过程中,我们需要确保这些程序在部署后正常运行。为了验证这些应用程序的功能,我们需要进行端到端 (End to End, E2E) 测试。 E2E 测试是一个自动化的过程,通过验证应用程序的模拟场景来模仿真实用户的行为。通过这种方式我们可以测试到所有层级,包括用户界面、功能、维护性、性能等。An…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript function函数种类

    浅谈JavaScript function函数种类 在JavaScript中,函数是一种非常重要的概念。函数就是一段代码块,可以被多次调用。JavaScript中的函数又可以分为多种类型,下面我们将详细介绍这些类型。 1. 函数声明 函数声明是最常见的函数类型。它是使用function关键字定义的一个函数。函数声明的基本语法如下: function func…

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