質問編集履歴

6

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

2019/02/09 08:09

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- ### argumentsオブジェクトが破壊される
25
+ ### argumentsオブジェクトが破壊される (Sloppy Mode限定)
26
26
 
27
27
 
28
28
 
@@ -80,17 +80,43 @@
80
80
 
81
81
 
82
82
 
83
- しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
84
-
85
- 2つ異なる方法で引数参照する事、アルゴリズムを複雑にると考えている為です
83
+ 事象発生条件3つあります。
86
84
 
87
85
 
88
86
 
87
+ 1. Sloppy Mode である (Strict Modeではない)
88
+
89
+ 2. 引数 `a` を再代入する
90
+
89
- Q1. arguments破壊の影響受け有意なコードとして、どんなものが考えられますか。
91
+ 3. `arguments[0]` 参照す
90
92
 
91
93
 
92
94
 
95
+ ### argumentsを破壊させるコードを書くメリット
96
+
97
+
98
+
99
+ そもそも、arguments破壊の条件を満たしたコードを書くメリットはあるのでしょうか。
100
+
101
+ 私のコーディングスタイルでは、「引数名による参照」と「arguments[i]による参照」は二者択一であり、それぞれの引数に対してどちらで参照するかを予め決めておきます(参照法を一つにする事でシンプルに書ける為)。
102
+
103
+
104
+
105
+ - 第一引数 … 引数 a で参照する
106
+
107
+ - 第二引数以降 … arguments[i] で参照する
108
+
109
+
110
+
111
+ 従って、条件2と条件3が同時に成立する事はなく、この事象が発生する可能性は0になります。
112
+
113
+
114
+
93
- ### V8における最適化の
115
+ ###
116
+
117
+
118
+
119
+ Q1. argumentsの破壊条件を成立したコードを書くメリットはありますか。あるとしたら、どんなコードが考えられますか。
94
120
 
95
121
 
96
122
 
@@ -98,6 +124,6 @@
98
124
 
99
125
 
100
126
 
101
- Q2. この問題の詳細をご存知の方は教えて下さい。
127
+ Q2. V8最適化問題の詳細をご存知の方は教えて下さい。
102
128
 
103
- Q3. この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
129
+ Q3. V8最適化問題は現行の最新である「Google Chrome v72.0.3626.96でも残存しているのでしょうか。

5

追記の説明文を追加

2019/02/09 08:09

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -74,6 +74,12 @@
74
74
 
75
75
 
76
76
 
77
+ **(2019/02/09 16:34追記)**
78
+
79
+ @maisumakun さんより、Strict Modeではarguments破壊されないという指摘を頂きましたので、コードを追記しました。
80
+
81
+
82
+
77
83
  しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
78
84
 
79
85
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。

4

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

2019/02/09 07:36

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -30,13 +30,15 @@
30
30
 
31
31
 
32
32
 
33
- これはおそらく、`arguments` オブジェクトの要素値を書き換えてしまう動作を表していると想像します。
33
+ これはおそらく、Sloppy Modeで `arguments` オブジェクトの要素値を書き換えてしまう動作を表していると想像します。
34
34
 
35
35
 
36
36
 
37
37
  ```JavaScript
38
38
 
39
+ // Sloppy Mode
40
+
39
- function foo (a) {
41
+ function sloppy (a) {
40
42
 
41
43
  a += 2;
42
44
 
@@ -48,19 +50,37 @@
48
50
 
49
51
 
50
52
 
53
+ // Strict Mode
54
+
55
+ function strict (a) {
56
+
57
+ 'use strict';
58
+
59
+ a += 2;
60
+
61
+ console.log(a); // 3
62
+
63
+ console.log(arguments[0]); // 1 (書き換わらない)
64
+
65
+ }
66
+
67
+
68
+
51
- foo(1);
69
+ sloppy(1);
70
+
71
+ strict(1);
52
72
 
53
73
  ```
54
74
 
55
75
 
56
76
 
57
- しかし、私の中では、仮引数で参照る変数を `arguments` で参照ません。
77
+ しかし、私の中では、仮引数で参照している変数 `a` を `arguments` で参照する事はありません。
58
78
 
59
79
  2つの異なる方法で引数参照する事は、アルゴリズムを複雑にすると考えている為です。
60
80
 
61
81
 
62
82
 
63
- Q1. **arguments破壊の影響を受ける有意なコード**として、どんなものが考えられますか。
83
+ Q1. arguments破壊の影響を受ける有意なコードとして、どんなものが考えられますか。
64
84
 
65
85
 
66
86
 

3

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

2019/02/09 07:33

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- Q1. それが必要状況にどんなコードが考えられますか。
63
+ Q1. **arguments破壊の影響を受ける有意コード**として、どんなものが考えられますか。
64
64
 
65
65
 
66
66
 
@@ -74,4 +74,4 @@
74
74
 
75
75
  Q2. この問題の詳細をご存知の方は教えて下さい。
76
76
 
77
- Q3. また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
77
+ Q3. この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。

2

Q1~Q3

2019/02/09 07:12

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- それが必要な状況にどんなコードが考えられますか。
63
+ Q1. それが必要な状況にどんなコードが考えられますか。
64
64
 
65
65
 
66
66
 
@@ -72,6 +72,6 @@
72
72
 
73
73
 
74
74
 
75
- この問題の詳細をご存知の方は教えて下さい。
75
+ Q2. この問題の詳細をご存知の方は教えて下さい。
76
76
 
77
- また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。
77
+ Q3. また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。

1

Google Chrome

2019/02/09 05:51

投稿

think49
think49

スコア18166

test CHANGED
File without changes
test CHANGED
@@ -74,4 +74,4 @@
74
74
 
75
75
  この問題の詳細をご存知の方は教えて下さい。
76
76
 
77
- また、この問題は現行版(v72.0.3626.96)でも残存しているのでしょうか。
77
+ また、この問題は現行版(Google Chrome v72.0.3626.96)でも残存しているのでしょうか。