函数内部属性

函数中有两个特殊的对象。

  • arguments:它包含了所有的参数,重要的是它的一个叫做callee的属性,用于指向拥有这个参数的函数。好处是什么呢

实例:

function fa(num){if(num<=1){return 1;}else{return num*fa(num-1);}}
alert(fa(3));//6

这是一个普通的递归调用,但是却高度耦合,即严重依赖fa()。
但是使用了arguments.cellee(个人理解就是用这个可以代替函数名),就可以随意更换函数名了。

实例:

function fa(num){if(num<=1){return 1;}else{return num*arguments.callee(num-1);}}var fal = fa;  //随意更改函数名
alert(fa(3));//6
alert(fal(3));//6

之所以能这样使用,是因为callee本身是一个指针。

  • this:和java以及c的this含义大致一直,就是指当前所指的对象。

我们用实例来解释:

window.color = 'red';
var o = {color:'blue'};function sayColor(){alert(this.color);
}sayColor(); //red
o.sayColor = sayColor; //没有()的函数名就是指针,这里把指针交给0.sayColor
o.sayColor();  //blue

sayColor作用与全局,而js中全局都是用window指代,所以直接调用sayColor的到的是red。
第二点,非常重要的一点,因为在js中,函数名本身其实就是一个指针,所以无论谁指向它都一样

  • 函数对象的另一个属性caller,用于保存当前函数的引用(调用)。

下面是实例:

function outer(){inner();
}function inner(){alert(inner.caller);
}outer();

输出:

function outer(){inner();
}

即inner的引用。
之前学习了arguments.callee这里也可以用,使得更为松散的耦合。

function outer(){inner();
}function inner(){alert(arguments.callee.caller);
}outer();

函数的属性和方法

函数既然是对象,就具有属性和方法。通用的属性是length和prototype。

length表示函数接收参数的个数:

function add(num1,num2){return num1+num2;
}alert(add.length);  //2个参数

prototype在第六章

apply()和call()

apply实例:

function sum(num1,num2){return num1+num2;
}function callSum(num1,num2){return sum.apply(this,arguments);  //this是当前作用域范围(window,因为是在全局作用域中调用的)
}
function callSum2(num1,num2){return sum.apply(this,[num1,num2]);
}alert(callSum(10,10));  //20
alert(callSum(10,10));  //20

call()唯一的不同是除了第一个this参数,其他传递参数必须一个个列举出来,实例:

function sum(num1,num2){return num1+num2;
}function callSum(num1,num2){return sum.call(this,num1,num2);
}alert(callSum(10,10)); //20

其实apply和call真正的作用是扩充函数的作用域。
实例:

window.color = 'red';
var o = {color:'blue'};function sayColor(){alert(this.color);
}sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue

由上,本来sayColor是全局定义的函数,但是使用了call,在第三个调用中,使得结果为blue

bind()

bind用于创建实例函数,并且把this的值绑定在bind的函数上。
实例:

window.color = 'red';
var o = {color:'blue'};function sayColor(){alert(this.color);
}var newSayColor = sayColor.bind(o);
newSayColor();//blue

基本包装类型

我们知道基本类型本来是不具备方法的,但是很高兴的是ecmascript提供了基本类型包装。
什么意思呢:当访问基本类型的时候,会创建一个基本类型的实例,在实力上调用方法,最后消除实例。这就使得基本类型和字符串一样了。

引用类型和基本类型的区别就是生存周期,引用类型会一直存在内存中,而基本类型包装则会在执行瞬间销毁

转载于:https://www.cnblogs.com/comefuture/p/8305955.html

js高级教程阅读笔记 第五章-引用类型(5.6)相关推荐

  1. javascript高级程序设计学笔记——第五章 引用类型

    对象是某个特定引用类型的实例:新对象是使用new操作符后跟构造函数来创建的,构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而存在的: 一.Object类型 创建Object实例的方式有两 ...

  2. JS高级程序设计——阅读笔记四

    JS高级程序设计--阅读笔记四 第六章 集合引用类型 6.1 Object 6.2 Array 6.2.1 创建数组 from()函数 6.2.2 数组空位 6.2.3 数组索引 6.2.4 检测数组 ...

  3. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_/*<深入理解C指针>学习笔记 -- 第五章*//*不应该修改的字符串就应该用 co ...

  4. javascript高级程序设计 学习笔记 第五章 上

      第五章   引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScri ...

  5. 《Dreamweaver CS6 完全自学教程》笔记 第五章:网页中的图像编辑

    文章目录 第五章:网页中的图像编辑 5.1 图像占位符 5.1.1 插入图像占位符 5.1.2 将图像占位符替换为图像 技术专题:预览网页时不显示图像的问题 5.2 交互式图像 实战:创建网页导航条 ...

  6. 【Coq学习】Formal Reasoning About Programs 阅读笔记第五章

    第五章 归纳关系与规则归纳 Inductive Relations and Rule Induction 类似于在第 2 章讨论过的归纳定义的集合或类型定义(inductive set or type ...

  7. JS高级程序设计读书笔记 (第九章 客户端检测)

    第九章 客户端检测 能力检测 最常用也最为人们广泛接受的客户端检测形式是能力检测(又称特性检测).能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力.采用这种方式不必顾及特定的浏览器如何如何,只 ...

  8. 《UNIX环境高级编程》笔记 第五章-标准IO库

    1. 流和FILE对象 在第三章的系统调用都是围绕文件描述符fd的.但是标准I/O库函数操作则是围绕流进行的.当使用标准I/O库打开或创建一个文件时,使用一个流与一个文件关联. 当打开一个流时,标准I ...

  9. buc算法java实现,数据挖掘概念与技术(hanjiawei)阅读笔记--第五章(数据立方体技术)...

    BUC 1.BUC(Botom-Up Construction)概念 从顶点方体向下计算冰山立方体 计算稀疏冰山立方体的算法 基于先验性质进行剪枝 ### 2.算法计算 例A(a1,a2,a3),B( ...

最新文章

  1. hive工作记录-20180513
  2. 【Android】不使用WebView来执行Javascript脚本(Rhino)
  3. 3d max用不同目标做关键帧_基于光流的视频目标检测系列文章解读
  4. 第五章 PX4-Pixhawk-GPS解析
  5. Tomcat 6 数据源配置
  6. spark中各类key算子的用法汇总(持续更新中)
  7. iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发
  8. myeclipse8.5 离线装SVN
  9. Vue 打包前需修改的配置,解决白屏问题
  10. php递归删除文件,PHP 递归删除文件夹
  11. linux下查看硬盘信息、硬盘分区、格式化、挂载、及swap分区
  12. 2015 Autodesk 开发者日( DevDays)和 助力开发周火热报名中
  13. spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
  14. mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...
  15. 产品总监基本功:从零到壹
  16. 7. Linux 环境
  17. 纯Java文件操作工具,支持文件、文件夹的复制、删除、移动
  18. 通信电子线路高如云pdf_通信电子线路 第三版 教学课件 高如云 封面及目录.pdf...
  19. Bus Hound(USB抓包工具)
  20. traceroute/tracert原理

热门文章

  1. JFinal 源码导读第八天(1) Db.tx 事物
  2. Yii学习笔记【2】
  3. java数组中最小的k个元素_java – 在数组中找到k个最小整数
  4. java刷新操作_java实现删除某条信息并刷新当前页操作
  5. java future用法_Java中的多线程知识点
  6. Python分享:命名空间和作用域的基础知识整合
  7. 2019数据安装勾选_宝象课堂丨如何正确安装SOLIDWORKS 2019?
  8. Webpack原理与实践
  9. 简单介绍python连接telnet和ssh的两种方式
  10. 如何管理多个 SSH 连接