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