征服《JavaScript高级程序设计(第3版)》之路 => 第四天,变量、作用域和内存问题

作为一名不爱读书之人的自我救赎 ╮(╯▽╰)╭ 。以前所有的知识几乎都是从各大学习网站的视频来的,大都会带一些讲课老师自己的理解,个人认为,这样有助于快速入门,因为老师在讲课时,还会带一些个人经验,对于以后的开发也会很有帮助,但是,也会有一些因为带了个人理解而导致的 `二手货` 知识在传达上有理解偏差,所以最终,我还是回到了这本javascript经典之作上,从基础上学起。

这个系列的笔记就是看看我能不能坚持把这本书读完,每天打卡;再顺便记录一下,本书中与我之前的理解有些偏差的地方,以及一些因为本来就很菜,所以记不太清,但是又很重要的点( ╮(╯▽╰)╭ 大概就是整本书吧 )

因为看得比较细,所以可能其中会有一些完全用不到的知识整理出来,但是for fun嘛

如有错误,欢迎指正。如有建议,欢迎讨论。如有益处,,,不存在的。


第 4 章 变量、作用域和内存问题

4.1 基本类型和引用类型的值

(1)只能为引用类型值添加属性。

给字符串添加属性后,下次访问属性不见了

(2)复制变量值 和 传参

            传参就是把 被传递的变量值 复制到 命名参数 和 arguments对象的一个元素中。

    1)基本类型值:在内存中占据固定大小的空间,因此被保存在栈内存中。

var num1 = 5;

var num2 = num1;

复制基本类型值:创建这个值的副本

    2)引用类型值:

        包含引用类型值的变量是一个指向对象的指针,而对象本身被保存在堆内存中。

var obj1 = new Object();

var obj2 = obj1;

obj1.name = "Nicholas";

alert(obj2.name);    //"Nicholas"

obj2 = new Object();

obj2.name = "Greg";

alert(obj1.name);    //"Nicholas" 

alert(obj2.name);    //"Greg"  

复制引用类型值:复制的其实是指针

(3)函数内部的命名参数就是个局部变量,会在函数执行完毕后立即销毁。

function setName(obj) {    //obj是个局部变量,此时与person共同指向一个对象

    obj.name = "Nicholas";    //修改共同指向的对象

    obj = new Object();    //断开原对象指向,指向新对象

    obj.name = "Greg";    //修改新对象

}    //执行完毕,被销毁,新对象不影响原对象(过程类似上图-“赋值引用类型值”所示)

var person = new Object();

setName(person);

alert(person.name);    //"Nicholas"

(4)检测引用类型的值:

result = variable instanceof constructor;

之前碰到的几个检测值的方法:

    1)typeof 检测基本类型常用

    2)Object.prototype.toString.call(variable) 检测对象类型

4.2 执行环境及作用域

关于执行环境和作用域的理解,以前看过一个系列的图文并茂的文章,个人觉得讲的比书上详细:javascript执行上下文、作用域与闭包(第四篇)---作用域与执行上下文

4.3 垃圾收集

标记清除

你可能感兴趣的:(征服《JavaScript高级程序设计(第3版)》之路 => 第四天,变量、作用域和内存问题)