开始之前,先明确几个易混淆点:
1.js引擎在读取js代码的时候,会执行两个步骤,①解释②执行;
2.解释就是通篇扫描所有的js代码,把所有声明提到顶端,执行就是操作一类的。;
3.变量提升:函数声明和变量声明总是会被解释器悄悄的提升到方法体的最顶端;
4.函数提升在变量提升之上。
开始:
1.ES(ECMAScript)变量可能包含两种不同类型的值:基本类型值+引用类型值;
2.基本类型值:简单的数据段;引用类型值:可能由多个值构成的对象;
3.引用类型的值是保存在内存中的对象,引用类型的值是按引用来访问的。
娓娓道来:
1.若一个变量向另一个变量复制基本类型的值,会在变量上创建一个新值,然后把该值复制到为新变量分配的位置上(复制基本类型值);
2.若一个变量向另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放在新变量分配的位置上,但是:这个值的副本其实只是一个指针,而指针指向存储在堆中的一个对象,复制操作结束后,两个变量实际上引用的是同一个对象;故改变一个变量,另外一个变量也会受影响。
其他:
1.js没有块级作用域;
2.作用域:对某个范围产生作用,而不会对外产生任何影响的封闭空间。在这个空间中,外部不能访问内部变量,但是内部变量可以访问外部变量。