Sunday, July 30, 2017

[JavaScript] 使用函式時 如果參數是"物件" 當在函式中改變區域內物件的值時 也會改變全域的物件的值

變數:
var int = 1;
function addInt (int) {
  int += 1;
}
addInt(int);
console.log(int);  //印出1; 變數的值 不受函式內的變動所影響

物件:
var obj = {int: 1};
function addObj (obj) {
  obj.int += 1;
}
addObj(obj);
console.log(obj.int);  //印出2; 物件的值被函式內的變懂影響了

PS.
網友Yang大提到,function內找不到的變數時,會去找 global (全域) 的變數,也就是說
var int = 1;
function add () {
  int += 1;
}
add();
console.log(int);  //會印出2; 因為function內沒有定義int,所以就會去找 global 的 int 了。

2 comments:

  1. function的scope找不到int,會往外找到global的int喔
    addInt(int){int += 1;}才會用local的int
    另外JS中用=operator來assign給variables時,它們會指向同一個物件,類似C的pointer,才會有第二個情況

    ReplyDelete
    Replies
    1. addint(int) 誤植為 addint(i) 謝謝提醒 :) 內文已修正

      Delete