變量做用域:語句var x = 'Hello, ' + y;並不報錯,緣由是變量y在稍後申明瞭。可是console.log顯示Hello, undefined,說明變量y的值爲undefined。這正是由於JavaScript引擎自動提高了變量y的聲明,但不會提高變量y的賦值。javascript
function foo() { var x = 'Hello, ' + y; console.log(x); var y = 'Bob'; } foo();//Hello,undefined function foo() { var x = 'Hello, ' + y; console.log(x); } var y = 'Bob'; foo();//Hello,Bob
引用類型複製的是指針的指向java
// 基本類型 var num1 = 5; var num2 = num1; num2 = 10; console.log(num1 + ' | ' + num2); // 5 | 10 // 引用類型 var obj1 = new Object(); obj1.num = 5; var obj2 = obj1; //obj2的地址就是obj1的地址 obj2.num = 10; console.log(obj1.num + ' | ' + obj2.num); // 10 | 10
函數傳遞參數是按值傳遞的,下面是一個經典的例子:函數
對於第一個例子,函數傳入person變量,其實只是傳入了person的值,並非把person自己傳進去, 經過console.log(person==setName(person))能夠發現返回的是false,從而person自己的值仍是bbb; 對於第二個例子,person是一個對象,在函數傳遞對象參數時,也只是把person的屬性以及相應的值傳遞到函數中, 可是因爲他是個對象,所以最後person.name已經在函數中修改了,從而打印的結果爲aaa指針