第四章:

基本数据类型:undefined、null、boolean、number、string
引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置
基本类型和引用类型值的方式不同,只能给引用类型的值添加属性:

var person = new Object();
person.name = “abc”;
console.log(person.name);   //abc
var wapper = “abc”;
wapper.age = 12;
console.log(wapper.age);    //undefined

复制变量:
无论使变量值的复制,还是参数值的传递,在JavaScript中,不存在引用传递的情况,全部都是值传递

var age1 = 15;
var age2 = age1;
age2 = 18;
console.log(age1);     //15
console.log(age2);     //18


变量复制引用类型等函数方法时,变量仅仅是函数/引用类型的一个代称,实际上只是一个名,背后存在一个指针指向该函数/引用类型,当出现值被复制/传递的情况是,只是将指针复制一遍,交给新变量,实际上两个变量还是指向同一个函数/引用类型。

var object1 = new Object();
var object2 = object1;
var object1 = “abc”;
console.log(object1);         //abc
console.log(object2);         //abc

function setName(){obj.name = “abc”;obj = new Object();   obj.name = “bcd”;
}
var person = new Object();
setName(person);
console.log(person.name);    //abc

检测类型:
使用typeof方法检测类型
使用instanceof操作符检测类型,但是这种方法检测类型在检测直接创建的变量时检测为false,但是检测引用类型方法创建的变量时为true

执行环境和作用域:
执行环境就是代码运行时的环境,因为变量/函数定义的位置不同,所以会出现不同的执行环境。
执行环境之定义的所有变量和函数都保存在一个叫做“变量对象”的对象中,自己编写的代码无法访问该对象,但是浏览器底层的解释器会使用。
当代码在浏览器中被解析时,会自动生成一个作用域链,用途是保证对变量和函数的有序访问。浏览器对于标识符的解析是沿着作用域链一级级向上搜索的,搜索的过程始终是从作用域链的前端开始,逐级向后回溯,直到找到标识符为止。

正是因为浏览器这种对于标识符的搜索方式,导致内部环境中的标识符可以通过作用域链访问外部环境中的变量/函数,但是外部环境中的标识符不可以访问内部环境中的变量/函数。因为当外部环境访问时,内部环境中的标识符还没有被解析到!

解析标识符时是正向从上到下解析,所以在调用变量/函数时是反向从下到上解析,也就是从调用点开始沿作用域链逐级向上寻找。

延长作用域链:
1.使用try,catch语句中的catch块
2.使用with语句
(个人感觉延长作用域链没有啥特别重要的作用)

没有块级作用域:
没有块级作用域这是JavaScript与其他语言很重要的一个不同,也是容易造成错误的一个很重要的地方!

if(a>0){var b = 1;
}
console.log(b);            //1,这里仍能访问到
for(var i=0; i<10; i++){a++
}
console.log(i);            //10

垃圾收集:
JavaScript有自动的垃圾回收机制,最常用的垃圾收集方式是标记清除式,后面也出现过一段时间的引用计数方法。
手动也可以解除引用,直接将引用变量的值设置为null即可。

JavaScript高级程序设计(反刍) 2相关推荐

  1. JavaScript高级程序设计(反刍) 11

    第12章: DOM2和DOM3是对DOM1的升级版本,主要的升级项在于对DOM1中方法的整合,集成了很多的方法,不必再使用DOM1中繁杂的写法,但是需要注意的是部分浏览器不支持DOM2或DOM3的某些 ...

  2. JavaScript高级程序设计(反刍) 4

    第六章(上): 对象是一种无序属性的集合,其属性值可以包含基本值.对象.函数.对象的属性/方法都存在名字,而这个名字每一个都映射一个值,这个值可以是数据,也可以是函数. 对象字面量是创建对象的首选方式 ...

  3. 《JavaScript高级程序设计(第3版)》教程大纲

    词条 <JavaScript高级程序设计>是2006年人民邮电出版社出版的图书,作者是(美)(Nicholas C.Zakas)扎卡斯.本书适合有一定编程经验的开发人员阅读,也可作为高校相 ...

  4. 前端红宝书《JavaScript高级程序设计》核心知识总结

    此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...

  5. 《JavaScript高级程序设计》(第2版)上市

      本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...

  6. 攻下《JavaScript高级程序设计》——第二章 在HTML中使用JavaScript

    从上一章我们知道了,JavaScript是一种专门为网页交互而设计的脚本语言,那么,它就免不了和HTML打交道,所以在设计JavaScript的时候,Netscape首要面临的就是,怎么让HTML和J ...

  7. 《javascript高级程序设计》笔记:内存与执行环境

    上一篇:<javascript高级程序设计>笔记:继承 近几篇博客都会围绕着图中的知识点展开 由于javascript是一门具有自动垃圾收集机制的编程语言,开发者不必担心内存的分配和回收的 ...

  8. 《javascript高级程序设计》笔记:变量对象与预解析

    上一篇:<javascript高级程序设计>笔记:内存与执行环境 上篇文章中说到: (1)当执行流进入函数时,对应的执行环境就会生成 (2)执行环境创建时会生成变量对象,确定作用域链,确定 ...

  9. javascript 高级程序设计_JavaScript 经典「红宝书」,几代前端人的入门选择

    人的一生中总要读几本经典书,在这个"经典"泛滥的年代,什么才是权威的代表,我想大概是一本的书的口碑,能积累下上佳口碑的书,往往也是能经得住时间推敲的.比如这本: 相信许多前端开发者 ...

最新文章

  1. 《JavaScript高级程序设计》读书笔记【一】
  2. Azure Stack-1807 版本 配置10分钟、自动部署6小时-我的ASDK第7次实践
  3. Quartus 13.1安装心得
  4. UART接口与COM口的区别
  5. Linux 性能分析工具总结
  6. 自定义LinkedList
  7. python rsa加密二进制文件_用Python中的RSA加密文件
  8. python猴子偷桃_Python实例100个(基于最新Python3.7版本)
  9. php 微盘系统教程,新版微盘API接口调用方法
  10. 版本为2.5的OpenMP的所有API函数
  11. Linux配置nginx打开报404,Linux下Nginx配置404页面的方法
  12. Could not find leader nimbus
  13. 前端—每天5道面试题(7)
  14. React Native 圆形进度条组件
  15. 《云周刊》69期:开门红利!阿里云2月活动来袭
  16. 左程云代码java_《程序员代码面试指南》-左程云高清PDF+源代码
  17. MATLAB人脸识别系统[GUI界面,完美运行,详细解析]
  18. f28335的c语言结构体,TMS320F28335程序SVPWM源程序
  19. 20/06/27 charles安装报【User installations are disabled via policy on the machine】解决方法
  20. 树莓派的一生:树莓派十年

热门文章

  1. 【软件测试随笔】web测试点App测试点
  2. 有没有可以每隔45分钟就提醒一下的便签APP
  3. 高中计算机课程书籍,高中信息技术教材分析(整书).doc
  4. 在ARM开发板上实现LCD+USB键盘
  5. 关于 Qt在线安装速度较慢 的解决方法
  6. 色彩模型--ps课程笔记
  7. 信工所考博计算机网络真题,2011年空军工程大学3001信息与通信工程专业基础综合(A卷)考博真题考博试题博士研究生入学考试试题...
  8. HP_MSA2000 系统存储简介
  9. 格莱美上的社交大战:Instagram们都有哪些亮点?
  10. swagger ui 怎么输入对象_swagger ui页面参数不能输入