2018年2月27日火曜日

JavaScriptのargumentsって気持ち悪い動きをするんですね

このエントリーをはてなブックマークに追加

久々のブログ

皆様お久しぶりです、Arc Cosineです。
最近は、ゲームブログばかり更新しているので、この雑ブログも閑古鳥が泣いております。
今日は珍しく技術的な話です。

JavaScriptのargumentsって、色々便利に使えるのですが、意外とその仕様をしっかりと理解していませんでした。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

興味がある方は、↑を見てください。
見てて面白いなーと思ったのが、このコード。

function func(a) { 
  arguments[0] = 99; // updating arguments[0] also updates a
  console.log(a);
}
func(10); // 99

お前変わるのかよwwwww

function func(a) { 
  a = 99; // updating a also updates arguments[0]
  console.log(arguments[0]);
}
func(10); // 99

こんな気持ち悪い動きもします。
aを変えているのに、arguments[0]が変わるという挙動をします。

ちなみに、デフォルト値を設定するという気持ち悪いコードを書くとこういう動きをします。

function func(a = 55) { 
  arguments[0] = 99; // updating arguments[0] does not also update a
  console.log(a);
}
func(10); // 10

なんだよお前wwwwww
いやぁ、草が生えます。

こういう謎の動きをするので、strictではない、デフォルト値を指定するという書き方は、避けたほうが良いですねー。

JavaScriptを触り続けて10年が経過しようとしていますが、こういう基本的な事でも知らないことってあるものですね。
argumentsを使うようなテクニカルなコードを書く事は滅多に無いのですが、頭の片隅に置いておくと良いでしょうね。

0 件のコメント :

コメントを投稿