学习javascript,感觉有些吃力,有些名词,名词的解释,看不懂意思,然后这一段不懂,更不用谈它后面的运行逻辑了。比如执行上下文,然后解释是js代码执行的环境,我就很不理解,环境是个什么东西,太抽象了,一个内存空间?一个变量?有没有那种从计算机电信号讲到js的书啊,网上自学东拼西凑还断章。
我觉得程序和现实中的关联,最重要的就是计算机的硬件到软件的过程。
要注意两条:(1)由浅入深,学习驾驶不一定要掌握汽车的原理,虽然掌握原理对开车也有帮助,但是一上来开车经验都没有,去学原理根本就是无的放矢。
(2)抓主要矛盾,搞清楚各种概念的主次。
我举一个例子,底层其实并不重要,好比我们管汽车的加速踏板叫做油门,但是实际上现在根本不是油门了,踏板从最初控制油量到后来控制节气门到现在控制电机,和油已经没有关系了。
计算机也是一样,我们习惯称呼磁盘,但是现在的硬盘已经不是机械硬盘,用的是半导体存储。但是计算机上运行的程序除了速度更快,需要任何改变么?其实还是原来的程序。
js从硬件开始算起,中间隔了很多层,别的不说,就说js是解释语言,需要解释器来执行,而解释器已经迭代了很多次,从最初的读取一行解释一行的纯解释器,到现在的 JIT 编译,直接产生机器码执行,底层机制已经突飞猛进改变了。
// 复杂类型 : Object 所有对象都是复杂类型 (所有的对象都是基于Object)
定义一个自定义构造函数,
function Person(name, age, sayHi) {
this.name = name;
this.age = age;
this.sayHi = function () {
console.log(this.name + 'hello');
}
}
var p1 = new Person('zs', 18);
var p2 = p1;
console.log(p2);
// 求 如果p1 里面的值发生变化时,p2 是否有影响
复杂类型:只有在新建一个对象时,才会在内存存储对象。此时在内存中新建了一个p1的对象,里 面包含所有属性,方法。
访问变量p1时,会先在栈上访问内存地址,再访问内存地址指向的对象属性,
如果访问p2时,因p2等于p1,所以两个内存地址一样的,所以在堆上不会新建对象,
直接访问p1的对象属性,如p1对象属性发生变化时,p2也会随之发生变化。