javascript真是神奇的语言,实在是太灵活了。 javascript中的变量,大体分为两大种。 “直接量”和”引用量”,姑且这么称呼吧,肯定不标准。 :) “直接量”包括,number,string,boolean 除此之外,都是”引用量” 有很多JS的面试题,都在这里搞点花样。 var a=[1,2,3]; var b=a; a[0]=2; console.log(b[0]); 结果:2 深入的理解这段代码。 var a=[1,2,3]; var b=a; 看起来似乎是把数组赋值给a了,其实不然,应该是a引用了数组[1,2,3] , 可以这么理解。内存中存在了一个数组[1,2,3],而变量a其实只是保存了一个对数组[1,2,3]的引用罢了。 那么,b=a就好理解了,b只是复制了这种引用。 所以a[0]的重新赋值,会让b[0]也随着改变。 因为a和b本来就引用了同一个数组。 而如果是直接量的,就不会存在这样的情况。 var a=”hello”; var b=a; a=1; console.log(b); 结果:hello ——————————————————————————————————— 有的时候,需要复制而不是引用,就麻烦了。 var a={attr:1}; 如果需要复制一个a。。怎么办呢? function copy(o){ var obj={}; for(var i in o){ obj[i]=o[i]; } return obj; } 没错,生成一个对象,然后把被复制的对象的所有属性都拷贝一份到新的对象里。。 当然,如果你要拷贝一个数组,就要new一个Array,拷贝一个function,就要new一个Function, ————————————————————————————————————————————– 引用,各种引用,各种各种引用,JS就是由引用组成的。 ...Read More