《JavaScript语言精髓与编程实践》读书笔记二
第3章非函数式语言特性
这一章首先介绍了语言的分类,命令式(结构化编程,面向对象编程),说明式(函数式等)。而这一章,主要介绍JS的非函数式特点。
在开始之前,首先介绍了由“结构化编程”向“面向对象编程”的演化趋势。“结构化编程”根本上是面向机器世界的“存储描述”因此抽象层次比较低,所以带了以下几点问题:
1. 结构体与实体直接相关,并且将这种相关性直接呈现在使用者的面前,因此开发人员必须面临数据的具体含义与关系。
2. 结构体的抽象更面向于数据存储形式的表达和算法实现方式,脱离了使用环境,算法的结构也缺乏通用性。
3. 僵化的类型与讲话的逻辑并存,影响了业务逻辑的表达。
以上三点,在面向对象编程之中得到了良好的解决。
1. 面向对象提出通过更加细化的可见设定(public,protected,private等),更好地实现了数据的封装以及数据域的管理。
2. 面向对象中的“继承”解决了结构体的通用性问题。可以在不同的场合从共有的特点中继承产生新的类别,从而更好地适应该场合。
3. “多态”被用来解决了“强类型”与业务逻辑表达之间的冲突。
此外,接口的提出(质保陆数据提的逻辑行为能力,而不暴露这种能力的实现方法和给予的数据特性),是一种更高层次的抽象。
之后就是重点讲js的“结构化编程”和“面向对象编程”的具体内容。
首先说结构化的内容:
1. break/break<label>的区别:break 表示跳出当前循环,break<label>表示跳出当前label之间的语句。
变量的作用域:
1. JS中,表达式级别的变量都是匿名的。
2. 由于JS中不存在语句级别的变量作用域,因此for ( var i in obj)中的i会逸出到上一级,很有可能造成污染!
3. JS中变脸的作用域只有两个局部变量(函数内部),全局变量。
4. 两个不利于开发的事情:
1) 在全局范围内任意声明变量,尤其是在for语句中声明变量
2) 在函数内部不适用var声明变量,而是直接为变量赋值将会导致变量逸出到全局
5. JS中,语法解释与执行分为两个阶段,变脸的显示声明(var)是在语法解释阶段处理的(在解释阶段该值为undefine)。
6. 变量的被创建的两个方式:
1) 在语法分析时,发现了显示声明的变量var
2) 在代码执行时,发现试图为一个未被创建的变量赋值
7. 变量的两种释放方式:
1) 某个函数退出时,清除函数内的未被引用的变量
2) 全局代码块终结时,将清除全局的变量和数据的引用
8. 一个具名函数完全等价于将一个匿名函数赋值给一个已经声明变量的表示符的。
var sb = function() {
alert("haha");
} function sb2() {
alert("haha");
}
这两个函数除了在语法上面有些不同之外,调用方式等都是一样的。
面向对象,内容比较多,下一篇再细说吧!
《JavaScript语言精髓与编程实践》读书笔记二的更多相关文章
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- 【Todo】深入理解Java虚拟机 读书笔记
有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M ...
- 深入理解Java虚拟机读书笔记5----虚拟机字节码执行引擎
五 虚拟机字节码执行引擎 1 运行时栈帧结构 ---栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素. ---栈帧中存储了方法的局部变 ...
- 深入理解Java虚拟机--阅读笔记二
垃圾收集器与内存分配策略 一.判断对象是否已死 1.垃圾收集器在对堆进行回收前,要先判断对象是否已死.而判断的算法有引用计数算法和可达性分析算法: 2.引用计数算法是给对象添加引用计数器,有地方引用就 ...
- 深入理解Java虚拟机读书笔记8----Java内存模型与线程
八 Java内存模型与线程 1 Java内存模型 ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节. ---此处的变量和J ...
- 深入理解Java虚拟机读书笔记7----晚期(运行期)优化
七 晚期(运行期)优化 1 即时编译器(JIT编译器) ---当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,包括被多次调用的方法和被多次执行的循环体. ...
- 深入理解Java虚拟机读书笔记4----虚拟机类加载机制
四 虚拟机类加载机制 1 类加载机制 ---概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型. -- ...
- 深入理解Java虚拟机读书笔记3----类文件结构
三 类文件结构 1 Java虚拟机的两种中立特性 · 平台无关性 · 语言无关性 实现平台无关性和语言无关性的基础是虚拟机和字节码存储格式(Class文件). 2 Clas ...
- 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE? Java技术体系包括: · Java程序设计语言: · 各种硬件平台上的 ...
- 深入理解java虚拟机读书笔记--java内存区域和管理
第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据 ...
随机推荐
- Web通信中的Get、Post方法
首先我们要了解Tomcat,Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选. ...
- C# 多线程、结构体
struct IpAndPort { public string Ip; public int Port; } private void Form1_Load(object sender, Event ...
- Linux命令:tail命令详解
概述:tail命令显示文件末尾区块,也可以查看线上日志 1.格式 tail [参数][文件] 2.参数 -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的 ...
- vlc_input buffer管理 & 时钟同步(转)
vlc_input buffer管理 & 时钟同步 一.背景1.当播放网络视频流时(比如udp视频流),发送方(编码)和接收方(解码)是并行操作的,如果发送太慢(或因为网络原因出现延迟)的话, ...
- 在Xcode4中给程序提供命令行参数(转)
网上xcode4的资料实在是不多,再加上xcode4相对3的改动还那么大,并且还只有英文版.我为了这个问题头痛了很久.后来终于找到了...方法如下 xcode菜单的Product->EditSc ...
- [C++]C++类基本语法
本测试代码包括以下内容: (1)如何使用构造函数:(2)默认构造函数:(3)对象间赋值:(4)const使用语法:(5)定义类常量: 一种方法是用enum,另一种方法是使用static. #inclu ...
- javascript——可以判断值的类型的函数
function classof(o){ return Object.prototype.toString.call(0).slice(8,-1); } Function.prototype.getN ...
- 简明Vim练级攻略
原文:酷壳网 vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim P ...
- Oracle通过主键id删除记录很慢
问题描述: Oracle通过主键id删除2000条记录很慢,需要花费十二分钟. 解决过程: 1.首先查看SQL的执行计划,执行计划正常,cost只有4,用到了主键索引. 2.查看等待事件, selec ...
- Javascript闭包函数快速上手
闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...