javascript高级编程笔记第五章
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 没有重载(深入理解)
- 把函数名现象做指针,可以帮助理解为何没有重载
 - 重复声明两个同名函数只会覆盖前一个的引用
 
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高级编程笔记第五章的更多相关文章
- Javascript高级程序设计笔记     <第五章> 引用类型
		
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...
 - [书籍翻译] 《JavaScript并发编程》第五章 使用Web Workers
		
本文是我翻译<JavaScript Concurrency>书籍的第五章 使用Web Workers,该书主要以Promises.Generator.Web workers等技术来讲解Ja ...
 - javascript高级编程笔记01(基本概念)
		
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
 - C#高级编程笔记之第二章:核心C#
		
变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...
 - 【读书笔记】C#高级编程 第二十五章 事务处理
		
(一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...
 - 【读书笔记】C#高级编程 第十五章 反射
		
(一)在运行期间处理和检查代码 自定义特性允许把自定义元数据与程序元素关联起来.反射是一个普通术语,它描述了在运行过程中检查和处理程序元素的功能.例如,反射允许完成的任务: 枚举类型的成员 实例化新对 ...
 - JavaScript高级程序设计:第五章
		
引用类型 一.object类型: 创建object实例的方式有两种.第一种是使用new操作符后跟Object构造函数,如下所示: var person = new Object(): person ...
 - javascript高级编程3第三章:基本概念 本章内容 语法 数据类型 流控制语句 函数
		
3.1 语法 ECMAScript的语法大量借鉴了C及其他类C语言的语法. 3.1.1 区分大小写 3.1.2 标识符 所谓标识符,就是值变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格 ...
 - 《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 操作方法 ...
 - javascript高级编程笔记05(面向对象)
		
面向对象设计 es中有两种属性:数据属性和访问器属性 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通 ...
 
随机推荐
- Dubbo 3.0 前瞻系列 | 2020双11,Dubbo3.0 在考拉的超大规模实践
			
很多开发者一直以来好奇:阿里自己有没有在用Dubbo,会不会用Dubbo?在刚刚结束的双11,我们了解到阿里云今年提出了"三位一体"的理念,即将"自研技术".& ...
 - 从 Flink Forward Asia 2021,看Flink未来开启新篇章
			
简介:本文将对FFA Keynote议题作一些简单的归纳总结,感兴趣的小伙伴们可以在FFA官网[2]找到相关主题视频观看直播回放.  作者 | 梅源(Yuan Mei) 来源 | 阿里技术公众号 ...
 - 解密 Dubbo 三大中心的部署架构
			
简介:Dubbo作为一个微服务框架,Dubbo SDK与应用服务绑定在同一个进程内,它跟随着应用服务被部署在分布式集群各个位置,为了在分布式环境下实现各个应用服务间的协作, Dubbo 定义了一些中 ...
 - OpenYurt 联手 eKuiper,解决 IoT 场景下边缘流数据处理难题
			
简介: 云计算的出现促使物联网实现爆炸式增长.在设备规模和业务复杂度不断攀升的趋势之下,边缘计算因其能够将计算能力更靠近网络边缘和设备,从而带来云性能成本的降低,也在这波浪潮之下得到快速发展. 作者 ...
 - [FAQ] Vue 如何控制标签元素的某个属性的显示 ?
			
这需要借助 v-model 的用法,动态决定元素的展示. <q-btn :disable="2 > 1">按钮</q-btn> 展示结果是:<q ...
 - WPF 不安装 WindowsAppSDK 使用 WinRT 功能的方法
			
安装 Microsoft.WindowsAppSDK 库会限制应用程序只能分发 windows 10 应用,如果自己的应用程序依然需要兼容 Win7 等旧系统,那直接采用安装 WindowsAppSD ...
 - dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退
			
本文来告诉大家 WPF 已知问题,在用户的设备上,如果不存在 Arial 字体,同时安装了一些诡异的字体,那么也许就会让应用在使用到诡异的字体的时候,软件闪退 在 WPF 的 FontFamily.c ...
 - 11.Node节点维护
			
题目:Node节点维护 配置环境kubectl config use-context ek8s 将名为ek8s-node-0的node节点设置为不可用,并重新调度该node上所有运行的pods. 官方 ...
 - vue引入一个单独的数据文件
			
1.新建一个address.js的文件 2.文件内const citys = { "北京市": ["东城区","西城区",& ...
 - Oracle和达梦:获取更新随机时间sql
			
需求 1.修改数据库中表的创建.更新时间,日期固定,时间随机(日期也可以随机): 2.拿到这些sql去数据库执行就行了. 前提 -- 生成8-12间的随机数(小数) SELECT DBMS_RANDO ...