chapter 5

5.5 Function类型

未完待续

函数实际上是对象,每个函数都是Function类型的实例,因此与其他引用类型一样具有属性和方法

因此函数名实际上就是函数对象的指针,不会与某个函数绑定

    //因此函数可以这么定义
// 可以用来理解 函数是对象,函数名是指针
// 但是不推荐这么定义函数
const myFun = new Function('num1', 'num2', 'return num1 + num2'); // 一个函数可以有多个名字
funtion age() {
console.log('my age is 19');
} const myAge = age;
myAge(); // 19
age(); // 19

5.5.1 没有重载(深入理解)

  1. 把函数名现象做指针,可以帮助理解为何没有重载
  2. 重复声明两个同名函数只会覆盖前一个的引用

5.5.2 函数声明与函数表达式

解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何函数代码前可用。即函数声明提升

5.5.3 作为值的函数

因为函数名本就是一个变量,所以可以将函数作为另一个函数的结合返回

要访问函数的指针而不执行函数的话,必须去掉大括号


// sort示例
function compare() {
return function(object1, object2) {
const value1 = object1[propertyName];
const value2 = object2[propertyName]; if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
}
// 调用
const data = [
{
name: 'azoux1',
age; 19,
},
{
name: 'azoux2',
age; 190,
},
];
data.sort(compare, 'name'); // 按name排序
data.sort(compare, 'age'); // 按age排序

5.5.4函数内部属性

  • 两个特殊的对象

    • this
    • arguments -- 保存函数参数
      • callee属性 -- 指向拥有这个arguments对象的函数
    // 使用callee实现阶乘递归 降低耦合
function factorial(num) {
if (num < 2) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}

【松耦合】的方法,一般是底层函数,功能尽量单一,尽量避免修改底层函数。功能相近的函数,可以设计2个以上,不要为了减少代码量,把一个函数的功能设计的太多

5.5.5 函数属性的方法

每个函数包含两个属性:length和property。
其中length是希望接受的参数个数
property是保存所有的实例方法,诸如toString()等...
在es5中property的属性是不可以枚举的(for-in无效)

call()和apply()真正的用武之地不在于传递参数,而是扩充函数赖以运行的作用域

    // 举个例子
window.color = 'red';
window.age = 10;
o = {
color: 'blue',
}; function showColor() {
console.log(this.color);
console.log(this.age);
} showColor(); // red
// red 是因为当前调用showColor的是window对象 showColor.call(o) //blue
// call() 扩充了作用域 它会在o对象中寻找color属性,如果没有就是undefined

apply与call相似,只是传入其余参数的方式不同

扩充作用域的最大好处就是对象不需要和方法有任何耦合关系

bind()

bind顾名思义就是绑定,在绑定完传入的对象之后返回一个新的函数

javascript高级编程笔记第五章的更多相关文章

  1. Javascript高级程序设计笔记 <第五章> 引用类型

    一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...

  2. [书籍翻译] 《JavaScript并发编程》第五章 使用Web Workers

    本文是我翻译<JavaScript Concurrency>书籍的第五章 使用Web Workers,该书主要以Promises.Generator.Web workers等技术来讲解Ja ...

  3. javascript高级编程笔记01(基本概念)

    1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...

  4. C#高级编程笔记之第二章:核心C#

    变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...

  5. 【读书笔记】C#高级编程 第二十五章 事务处理

    (一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...

  6. 【读书笔记】C#高级编程 第十五章 反射

    (一)在运行期间处理和检查代码 自定义特性允许把自定义元数据与程序元素关联起来.反射是一个普通术语,它描述了在运行过程中检查和处理程序元素的功能.例如,反射允许完成的任务: 枚举类型的成员 实例化新对 ...

  7. JavaScript高级程序设计:第五章

    引用类型 一.object类型: 创建object实例的方式有两种.第一种是使用new操作符后跟Object构造函数,如下所示: var  person = new  Object(): person ...

  8. javascript高级编程3第三章:基本概念 本章内容 语法 数据类型 流控制语句 函数

    3.1 语法 ECMAScript的语法大量借鉴了C及其他类C语言的语法. 3.1.1 区分大小写 3.1.2 标识符 所谓标识符,就是值变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格 ...

  9. 《javascript高级程序设计》第五章 reference types

    第5 章 引用类型5.1 Object 类型5.2 Array 类型 5.2.1 检测数组 5.2.2 转换方法 5.2.3 栈方法 5.2.4 队列方法 5.2.5 重排序方法 5.2.6 操作方法 ...

  10. javascript高级编程笔记05(面向对象)

    面向对象设计 es中有两种属性:数据属性和访问器属性 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通 ...

随机推荐

  1. 全面升级!揭秘阿里云智能Logo设计的AI黑科技

    简介: 免费体验!阿里云智能logo设计一直致力于用AI技术,帮助更多有设计需求的朋友能"多快好省"地做logo,让"设计logo"这件有门槛的事情,通过智能工 ...

  2. 【ESSD技术解读-04】ESSD Auto PL规格,引领IO性能弹性新方向

    ​简介: 阿里云 ESSD 为云服务器 ECS 提供低时延.持久性和高可靠的块存储服务,成为云厂商全闪块存储的业界标杆.存储团队推出了 ESSD Auto PL 新的云盘规格,把性能与容量解耦,提供 ...

  3. 【产品动态】解读Dataphin流批一体的实时研发

    ​简介: Dataphin作为一款企业级智能数据构建与管理产品,具备全链路实时研发能力,从2019年开始就支撑可集团天猫双11的实时计算需求,文章将详细介绍Dataphin实时计算的能力. 背景 每当 ...

  4. three.js实现相机碰撞,相机不穿墙壁、物体

    大家好,本文实现了相机碰撞检测,使相机不穿墙壁.物体,并给出了思路和代码,感谢大家~ 关键词:数字孪生.three.js.Web3D.WebGL.相机碰撞.游戏相机 我正在承接Web3D数字孪生项目, ...

  5. Solution Set - 数学相关

    CF645F Link&Submission. 利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) ...

  6. 集群监管-USDP(智能大数据平台)

    UCloud Smart Data Platform(简称 USDP),是 UCloud 推出的智能化.轻量级.适用于私有化部署至客户本地的大数据基础服务平台,通过自研的 USDP Manager 管 ...

  7. 第五章-WAF 绕过

    WAF 绕过 1.WAF分类 1.1.软件 WAF 一般被安装到 Web 服务器中直接对其进行防护,能够接触到服务器上的文件,直接检测服务器上是否有不安全的文件和操作等. 常见的软件:安全狗.云盾.云 ...

  8. kube-proxy 流量流转方式

    简介 kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一.它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡.它有两种模式:iptables ...

  9. fastposter v2.7.1 紧急发布 电商海报编辑器

    fastposter v2.7.1 紧急发布 电商海报编辑器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.二维码海报,图片海报,分享海报, ...

  10. java调用webservice接口

    1.直接AXIS调用远程的webservice 注意:不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法. import org.apache.axis.c ...