慕勒3428872
背这种概念在初学时意义不大多写代码就能理解了简单说明下, ECMAScript有以下基础数据类型Function, Object, String, Number, Boolean, UndefinedObject也可以细分出Array, RegExp等对象类型只有Function, Object被当作heap中的对象, 它的特点是你可以增添其键值对例如Func = function(){}Func.test = 'test'console.log(Func.test)这就产生了把它作为参数传递时的问题, 因为对象的可以引用自身比如A = [0,1,2]A[1] = Aconsole.log(A + '')B = AB[1] = 1console.log(A + '')那麽就无法通过简单的操作复制一个对象, 於是以上的Func, A都只存储一个指针而对於其它类型的数据, 都可以通过有限的步骤, 高效的复制比如N = 0M = N++Nconsole.log(M)可以看出此处M, N所指向的数据空间是不同的当然在某些浏览器中, 为了字符串的高效操作, 它把长度较小的字符串全部放进内存特定位置, 用於减少复制产生的消耗更简单的讲, 就是stack中值在传递/赋值等操作时是产生新的副本的heap不会产生新的副本当然, 解释内核的详细解析情况, 参阅ECMA-262.pdf