S1:变量

  接触JS一段时间了,但总感觉不得要领,技术得不到提升,翻来覆去,决定对基础知识做一次系统的整理,要坚持每一天都有新的收获 !

变量,即通过一个名字将一个值关联起来,以后通过变量就可以引用到该值,比如:
var str = "Hello, World";
当我们下一次要引用”Hello, Wrold”这个串进行某项操作时,我们只需要使用变量str即可。变量的作用就是将值“存储”在这个变量上。这个‘存储把它理解为‘复制’,或者说当我们引用时是引用的这个变量的一个‘副本’(暂时这样理解),例如:

var num1 = 5;//数字x,基本类型
var num2 = num1;//数字y,基本类型
print(num1); 
print(
num2);
num1
= 2;//修改num1的值 print(num1);//num1的值变为2 print(num2);//num2的值不会变化

在此,num1 中保存的值是5。当使用num1 的值来初始化num2 时,num2 中也保存了值5。但num2
中的5 与num1 中的5 是完全独立的,该值只是num1 中5 的一个副本。此后,这两个变量可以参与任
何操作而不会相互影响。图4-1 形象地展示了复制基本类型值的过程。

这里涉及到数据类型:基本类型如数字,布尔值,它们在内存中都有固定的大小,我们通过变量来直接访问基本类型的数据。而对于引用类型,如对象,数组和函数,由于它们的大小在原则上是不受任何限制的,故我们通过对其引用的访问来访问它们本身,引用本身是一个地址,即指向真实存储复杂对象的位置。

由于数组的长度非固定,可以动态增删,因此数组为引用类型:

var array = [1,2,3,4,5];
var arrayRef = array;//arrayRef为一个指向存储在堆中的[1,2,3,4,5]的指针
array.push(6);
print(arrayRef);
图例:

引用指向的是地址,也就是说,引用不会指向引用本身,而是指向该引用所对应的实际对象。因此通过修改array指向的数组,则arrayRef指向的是同一个对象,因此运行效果如下:
1,2,3,4,5,6

总结:

(1)值类型:数值、布尔值、null、undefined

    值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准新开一个分店,这样新开的店与其它旧店互不相关、各自运营

(2)引用类型:对象、数组、函数

    引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响


作者:狂流
出处:http://www.cnblogs.com/kuangliu/
欢迎转载,分享快乐! 如果觉得这篇文章对你有用,请抖抖小手,推荐一下!

原文地址:https://www.cnblogs.com/kuangliu/p/3917710.html