變量做用域&函數傳遞參數按值傳遞

變量做用域:語句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指針

相關文章
相關標籤/搜索