Successfully reported this slideshow.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

簡單介紹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/

×