javascriptの参照渡しと値渡しについて
JAVASCRIPTREFERENCES & VALUES
View Slide
Name@brn (⻘野健利)Occupationフロントエンドエンジニア・ネイティブエンジニアCompanyCyberagent アドテクスタジオ AI MessengerOSSContributor of V8Abouthttp://info.b6n.ch
References and Valuesࢀর
References and Valuesࢀরࢀর
References and ValuesࢀরؒతʹΦϒδΣΫτΛมߋ͢ΔͦͷΦϒδΣΫτΛมߋ͢Δ
References or Values?KBWBTDSJQUࢀরͱͷ྆ํΛ͏ΦϒδΣΫτຖʹͲ͏ѻΘΕΔ͔ܾ·͍ͬͯΔ
Javascript object traitsࢀর"MMWBMVFTFYUFOET0CKFDUTUSJOH OVNCFS CPPMFBO
Pass by reference/valueconst A =const B =ࢀরA =B =
Pass by referenceconst A = {};const B = A;B.x = 1;console.log(A);// { x: 1 }
Pass by valueconst A = 1;const B = A;B++;console.log(A);// 1
Until here…ͱɺ͜͜·Ͱ͕Α͘ݴΘΕ͍ͯΔࠓճ͏ͪΐ͍ਂ۷Γͯ͠Έ͍ͨ
Mutable, ImmutableKBWBTDSJQUʹมߋՄೳͳͱมߋෆՄೳͳ͕͋ΔTUSJOH OVNCFS CPPMFBOมߋͰ͖ͳ͍
Special casesOVNCFSͱCPPMFBO͠Ͱ͋Δ͜ͱ͕ଟ͍ͨͩ͠TUSJOH৭ʑͳ͕͋Δέʔε͕ଟ͍7ͰTUSJOHࢀরͱͳ͍ͬͯΔ
String behave like valuelet A = 'a';let B = A;A += 'b' // Create new instance andassign to self.console.log(A);// 'ab';console.log(B);// 'a;
Immutablity make reference to value*NNVUBCMFͳจࣈྻ͕ͷΑ͏ʹৼΔ͏͕࣮ࡍʹͯ͢ࢀরΛ͍ͯ͠Δ
What is reference?ࢀরͱͳΜͩΖ͏
PointerΦϒδΣΫτੜ͞ΕΔͱώʔϓྖҬͱ͍͏ϝϞϦʹׂΓͯΒΕΔͦͷΦϒδΣΫτΛૢ࡞͢Δ߹ͦͷϝϞϦྖҬΛࢦࣔ͢͠ΞυϨεΛඞཁͱ͢Δ͜Ε͕ϙΠϯλͱݺΕΔͷ
Pointer is valueKTΤϯδϯΛ࣮͍ͯ͠Δ$$ͷੈքͰϙΠϯλͦͷͷ·ͨͰ͋ΔͦͷͨΊϙΠϯλͷϙΠϯλΛ࡞ͬͨΓͰ͖Δ
Reference is value͔͠͠KBWBTDSJQUͷੈքͰࢀরͷࢀর࡞Εͳ͍ͭ·Γࢀরৗʹ͠ͱͳΔ
pass by copy referenceͭ·ΓKBWBTDSJQUͰࢀর ϙΠϯλΛ͍ͯ͠͠Δࢀরͷ͠ͱͳ͍ͬͯΔ
Appendix7෦ͷจࣈྻ࣮Λ؆୯ʹ
String in V87Ͱจࣈྻ͕ҎԼͷΫϥεʹ͔Ε͍ͯΔ4FR0OF#ZUF4USJOH4FR5XP#ZUF4USJOH$POT4USJOH5IJO4USJOH4MJDFE4USJOH
String in V8ಛʹTVCTUSJOHΛߦͬͨΓͯ͠৽ͨʹจࣈྻΠϯελϯεΛ࡞͢Δ߹3PQFͱ͍͏ΞϧΰϦζϜΛར༻ͨ͠$POT4USJOH͕ར༻͞ΕΔ
Ropeจࣈྻͷ݁߹͕ߴ0 MPHOׂߴ0 MPHOऔΓग़͠0 MPHO
Rope5PEBZJTXFBSFKBWBTDSJQUFS`T5PEBZJT XFBSFKBWBTDSJQUFS`T3005
Rope5PEBZJT30058FBSF KBWBTDSJQUFS`T53&&
Summaryࢀরͱ͔Β3PQF·ͰோΊͯΈ·ͨ͠͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠