对于基本类型的值,赋值是通过值拷贝的形式;比如:
null
,
undefined
,
boolean
,
number
,
string
和ES6的
symbol
。对于复杂类型的值,通过引用拷贝的形式赋值。比如:对象、对象包括数组和函数。
var a = 2; // 'a' hold a copy of the value 2. var b = a; // 'b' is always a copy of the value in 'a' b++; console.log(a); // 2 console.log(b); // 3 var c = [1,2,3]; var d = c; // 'd' is a reference to the shared value d.push( 4 ); // Mutates the referenced value (object) console.log(c); // [1,2,3,4] console.log(d); // [1,2,3,4] /* Compound values are equal by reference */ var e = [1,2,3,4]; console.log(c === d); // true console.log(c === e); // false
function
outer() { let a = 1; functioninner() { let b = 2; functioninnermost() { let c = 3; console.log(a, b, c); // 1 2 3 } innermost(); console.log(a, b); // 1 2 — 'c' is not defined } inner(); console.log(a); // 1 — 'b' and 'c' are not defined } outer();
{ /* Original code */ console.log(i); // undefined var i = 10 console.log(i); // 10 }
{ /* Compilation phase */ var i; console.log(i); // undefined i = 10 console.log(i); // 10 } // ES6 let & const { console.log(i); // ReferenceError: i is not defined const i = 10 console.log(i); // 10 } { console.log(i); // ReferenceError: i is not defined let i = 10 console