Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Tommy Lin
林儀泰
FB/Email:tooto1985@gmail.com
 傳值參考(call by value)
◦ 複製內容到新的參照上。
 傳址參考(call by reference)
◦ 引用參考到新的參照上,修改或賦予新值都會改變原有參
照。
 共享參考(call by sharing)
◦ 複製參...
 傳值參考(call by value)
◦ 複製內容到新的參照上。
 傳址參考(call by reference)
◦ 引用參考到新的參照上,修改或賦予新值都會改變原有參
照。
 共享參考(call by sharing)
◦ 複製參...
 為什麼看起來像傳值?
◦ 原始(primitive)型別是不可變(immutable)的,無法修改
值,永遠只能賦予新值。
 為什麼看起來像傳址?
◦ 物件(object)型別雖然是可變(mutable)的,修改會改變原
本參考,但賦予新...
var aaa = “string”; RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
aaa
“string”
AddressVariable
0x01
var aaa = “string”;
function run(xyz) {
xyz=“world”;
}
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
Address
run
functi...
var aaa = “string”;
function run(xyz) {
xyz=“world”;
}
run(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
Address
...
var aaa = “string”;
function run(xyz) {
xyz=“world”;
}
run(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
AddressV...
var aaa = “string”;
function run(xyz) {
xyz=“world”;
}
run(aaa);
console.log(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
...
var aaa = {name:”john”}; RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
aaa
{name:“john”}
AddressVariable
0x01
var aaa = {name:”john”};
function run(xyz) {
xyz.name=“mark”;
}
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
Address
r...
var aaa = {name:”john”};
function run(xyz) {
xyz.name=“mark”;
}
run(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09...
var aaa = {name:”john”};
function run(xyz) {
xyz.name=“mark”;
}
run(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09...
var aaa = {name:”john”};
function run(xyz) {
xyz.name=“mark”;
}
run(aaa);
console.log(aaa);
RAM
0x01
0x02
0x03
0x04
0x05
0...
 有一種類似傳值參考或傳址參考的錯覺
 但JavaScript中只有共享參考(call by sharing)一種
 http://www.ecma-international.org/ecma-262/5.1/#sec-8.7
 https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sh
a...
簡單介紹JavaScript參數傳遞
簡單介紹JavaScript參數傳遞
Upcoming SlideShare
Loading in …5
×

簡單介紹JavaScript參數傳遞

5,758 views

Published on

簡單介紹JavaScript參數傳遞

簡單介紹JavaScript參數傳遞

  1. 1. Tommy Lin 林儀泰 FB/Email:tooto1985@gmail.com
  2. 2.  傳值參考(call by value) ◦ 複製內容到新的參照上。  傳址參考(call by reference) ◦ 引用參考到新的參照上,修改或賦予新值都會改變原有參 照。  共享參考(call by sharing) ◦ 複製參考到新的參照上,修改會改變原有參照,但賦予新 值則會產生新的參考。
  3. 3.  傳值參考(call by value) ◦ 複製內容到新的參照上。  傳址參考(call by reference) ◦ 引用參考到新的參照上,修改或賦予新值都會改變原有參 照。  共享參考(call by sharing) ◦ 複製參考到新的參照上,修改會改變原有參照,但賦予新 值則會產生新的參考。
  4. 4.  為什麼看起來像傳值? ◦ 原始(primitive)型別是不可變(immutable)的,無法修改 值,永遠只能賦予新值。  為什麼看起來像傳址? ◦ 物件(object)型別雖然是可變(mutable)的,修改會改變原 本參考,但賦予新值會產生新的參考。 ◦ 我們常常忽略了”賦予新值會改變原有參考”這個定義 ◦ 感覺好像是傳址參考 (實際上並不是喔)!
  5. 5. var aaa = “string”; RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 aaa “string” AddressVariable 0x01
  6. 6. var aaa = “string”; function run(xyz) { xyz=“world”; } RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 Address run function run… Variable aaa “string” 0x01 0x03
  7. 7. var aaa = “string”; function run(xyz) { xyz=“world”; } run(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 Address xyz Variable run function run… aaa “string” 0x01 0x03 0x01
  8. 8. var aaa = “string”; function run(xyz) { xyz=“world”; } run(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 AddressVariable xyz run function run… aaa “string” 0x01 0x03 0x06 “world”
  9. 9. var aaa = “string”; function run(xyz) { xyz=“world”; } run(aaa); console.log(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 AddressVariable xyz run function run… aaa “string” 0x01 0x03 0x06 “world”
  10. 10. var aaa = {name:”john”}; RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 aaa {name:“john”} AddressVariable 0x01
  11. 11. var aaa = {name:”john”}; function run(xyz) { xyz.name=“mark”; } RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 Address run function run… Variable aaa {name:“john”} 0x01 0x03
  12. 12. var aaa = {name:”john”}; function run(xyz) { xyz.name=“mark”; } run(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 AddressVariable run function run… aaa {name:“john”} 0x01 0x03 xyz 0x01
  13. 13. var aaa = {name:”john”}; function run(xyz) { xyz.name=“mark”; } run(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 AddressVariable run function run… aaa {name:“mark”} 0x01 0x03 xyz 0x01
  14. 14. var aaa = {name:”john”}; function run(xyz) { xyz.name=“mark”; } run(aaa); console.log(aaa); RAM 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 AddressVariable run function run… aaa {name:“mark”} 0x01 0x03 xyz 0x01
  15. 15.  有一種類似傳值參考或傳址參考的錯覺  但JavaScript中只有共享參考(call by sharing)一種
  16. 16.  http://www.ecma-international.org/ecma-262/5.1/#sec-8.7  https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sh aring  http://www.codeproject.com/Articles/882622/An- Illustrated-Guide-to-Parameter-Passing-in-JavaS  http://www.jstips.co/en/know-the-passing-mechanism/  http://bosn.me/js/js-call-by-sharing/

×