teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

argumentsを破壊させるコードを書くメリット

2019/02/09 08:09

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -10,7 +10,7 @@
10
10
  >
11
11
  > なぜ? 特に argumentsオブジェクトにアクセスするとき、パラメータを再割り当てすると予期しない動作をする可能性があります。
12
12
 
13
- ### argumentsオブジェクトが破壊される
13
+ ### argumentsオブジェクトが破壊される (Sloppy Mode限定)
14
14
 
15
15
  > 特に argumentsオブジェクトにアクセスするとき、パラメータを再割り当てすると予期しない動作をする可能性があります。
16
16
 
@@ -39,14 +39,27 @@
39
39
  **(2019/02/09 16:34追記)**
40
40
  @maisumakun さんより、Strict Modeではarguments破壊されないという指摘を頂きましたので、コードを追記しました。
41
41
 
42
- しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
43
- 2つの異なる方法で引数参照する事は、アルゴリズムを複雑にると考えている為です
42
+ 象発生の条件3つあります。
44
43
 
44
+ 1. Sloppy Mode である (Strict Modeではない)
45
+ 2. 引数 `a` を再代入する
45
- Q1. arguments破壊の影響受ける有意なコードとして、どんなものが考えられまか。
46
+ 3. `arguments[0]` 参照
46
47
 
47
- ### V8におけ最適化の問題
48
+ ### argumentsを破壊させコードを書くメリット
48
49
 
50
+ そもそも、arguments破壊の条件を満たしたコードを書くメリットはあるのでしょうか。
51
+ 私のコーディングスタイルでは、「引数名による参照」と「arguments[i]による参照」は二者択一であり、それぞれの引数に対してどちらで参照するかを予め決めておきます(参照法を一つにする事でシンプルに書ける為)。
52
+
53
+ - 第一引数 … 引数 a で参照する
54
+ - 第二引数以降 … arguments[i] で参照する
55
+
56
+ 従って、条件2と条件3が同時に成立する事はなく、この事象が発生する可能性は0になります。
57
+
58
+ ### 質問
59
+
60
+ Q1. argumentsの破壊条件を成立したコードを書くメリットはありますか。あるとしたら、どんなコードが考えられますか。
61
+
49
62
  > 特にV8では最適化の問題も発生する可能性があります。
50
63
 
51
- Q2. この問題の詳細をご存知の方は教えて下さい。
64
+ Q2. V8最適化問題の詳細をご存知の方は教えて下さい。
52
- Q3. この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
65
+ Q3. V8最適化問題は現行の最新である「Google Chrome v72.0.3626.96でも残存しているのでしょうか。

5

追記の説明文を追加

2019/02/09 08:09

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -36,6 +36,9 @@
36
36
  strict(1);
37
37
  ```
38
38
 
39
+ **(2019/02/09 16:34追記)**
40
+ @maisumakun さんより、Strict Modeではarguments破壊されないという指摘を頂きましたので、コードを追記しました。
41
+
39
42
  しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
40
43
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。
41
44
 

4

Strict Modeではargumentsオブジェクトは破壊されない(maisumakunさん情報より)

2019/02/09 07:36

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -14,22 +14,32 @@
14
14
 
15
15
  > 特に argumentsオブジェクトにアクセスするとき、パラメータを再割り当てすると予期しない動作をする可能性があります。
16
16
 
17
- これはおそらく、`arguments` オブジェクトの要素値を書き換えてしまう動作を表していると想像します。
17
+ これはおそらく、Sloppy Modeで `arguments` オブジェクトの要素値を書き換えてしまう動作を表していると想像します。
18
18
 
19
19
  ```JavaScript
20
+ // Sloppy Mode
20
- function foo (a) {
21
+ function sloppy (a) {
21
22
  a += 2;
22
23
  console.log(a); // 3
23
24
  console.log(arguments[0]); // 3 (書き換えられてしまう)
24
25
  }
25
26
 
27
+ // Strict Mode
28
+ function strict (a) {
29
+ 'use strict';
30
+ a += 2;
31
+ console.log(a); // 3
32
+ console.log(arguments[0]); // 1 (書き換わらない)
33
+ }
34
+
26
- foo(1);
35
+ sloppy(1);
36
+ strict(1);
27
37
  ```
28
38
 
29
- しかし、私の中では、仮引数で参照る変数を `arguments` で参照ません。
39
+ しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
30
40
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。
31
41
 
32
- Q1. **arguments破壊の影響を受ける有意なコード**として、どんなものが考えられますか。
42
+ Q1. arguments破壊の影響を受ける有意なコードとして、どんなものが考えられますか。
33
43
 
34
44
  ### V8における最適化の問題
35
45
 

3

arguments破壊の影響を受ける有意なコード

2019/02/09 07:33

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -29,11 +29,11 @@
29
29
  しかし、私の中では、仮引数で参照する変数を `arguments` で参照しません。
30
30
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。
31
31
 
32
- Q1. それが必要状況にどんなコードが考えられますか。
32
+ Q1. **arguments破壊の影響を受ける有意なコード**として、どんなものが考えられますか。
33
33
 
34
34
  ### V8における最適化の問題
35
35
 
36
36
  > 特にV8では最適化の問題も発生する可能性があります。
37
37
 
38
38
  Q2. この問題の詳細をご存知の方は教えて下さい。
39
- Q3. また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
39
+ Q3. この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。

2

Q1~Q3

2019/02/09 07:12

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -29,11 +29,11 @@
29
29
  しかし、私の中では、仮引数で参照する変数を `arguments` で参照しません。
30
30
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。
31
31
 
32
- それが必要な状況にどんなコードが考えられますか。
32
+ Q1. それが必要な状況にどんなコードが考えられますか。
33
33
 
34
34
  ### V8における最適化の問題
35
35
 
36
36
  > 特にV8では最適化の問題も発生する可能性があります。
37
37
 
38
- この問題の詳細をご存知の方は教えて下さい。
38
+ Q2. この問題の詳細をご存知の方は教えて下さい。
39
- また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
39
+ Q3. また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。

1

Google Chrome

2019/02/09 05:51

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -36,4 +36,4 @@
36
36
  > 特にV8では最適化の問題も発生する可能性があります。
37
37
 
38
38
  この問題の詳細をご存知の方は教えて下さい。
39
- また、この問題は現行版(v72.0.3626.96)でも残存しているのでしょうか。
39
+ また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。