回答編集履歴
7
るby
test
CHANGED
@@ -60,6 +60,10 @@
|
|
60
60
|
|
61
61
|
上記に該当しない場合は `Reference Error` が発生します.
|
62
62
|
|
63
|
+
JavaScriptには変数が参照可能かどうかをエラーの発生なしに確認する手段はありません.
|
64
|
+
|
65
|
+
(グローバル変数を除く)
|
66
|
+
|
63
67
|
|
64
68
|
|
65
69
|
#### Ruby
|
@@ -76,6 +80,10 @@
|
|
76
80
|
|
77
81
|
上記に該当しない場合は `Name Error` が発生します.
|
78
82
|
|
83
|
+
Rubyでは変数が参照可能かどうかを `defined?` で確認出来ます.
|
84
|
+
|
85
|
+
(PHPの`isset`のように頻繁に使われることはありません)
|
86
|
+
|
79
87
|
|
80
88
|
|
81
89
|
Pythonはちょっとわかりません,すいません
|
6
Ruby
test
CHANGED
@@ -66,7 +66,7 @@
|
|
66
66
|
|
67
67
|
|
68
68
|
|
69
|
-
- 変数が同じ関数スコープにおいて**条件分岐に関わらず**代入する記述がある場合,
|
69
|
+
- 変数が同じ関数スコープにおいて**条件分岐に関わらず現在より上の行で**代入する記述がある場合,
|
70
70
|
|
71
71
|
代入されていなくても `nil` としてエラー無しに参照できる
|
72
72
|
|
5
Ruby補足
test
CHANGED
@@ -70,6 +70,8 @@
|
|
70
70
|
|
71
71
|
代入されていなくても `nil` としてエラー無しに参照できる
|
72
72
|
|
73
|
+
(RubyではJavaScriptの`var`のように巻き上げは起こらない)
|
74
|
+
|
73
75
|
|
74
76
|
|
75
77
|
上記に該当しない場合は `Name Error` が発生します.
|
4
何か一行に入りきらなかったので調整
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
- 変数が同じ関数スコープにおいて**条件分岐や書かれ
|
45
|
+
- 変数が同じ関数スコープにおいて**条件分岐や書かれた場所に関わらず** `var` 宣言されている場合,
|
46
46
|
|
47
47
|
代入されていなくても `undefined` としてエラー無しに参照できる
|
48
48
|
|
3
巻き上げ
test
CHANGED
@@ -42,13 +42,17 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
- 変数が同じ関数スコープにおいて**条件分岐に関わらず** `var` 宣言されている場合,
|
45
|
+
- 変数が同じ関数スコープにおいて**条件分岐や書かれている場所に関わらず** `var` 宣言されている場合,
|
46
46
|
|
47
47
|
代入されていなくても `undefined` としてエラー無しに参照できる
|
48
48
|
|
49
|
+
(現在より下の行に書かれていてもOKになることは「巻き上げ」と呼ばれる)
|
50
|
+
|
49
|
-
- 変数が同じブロックスコープ内
|
51
|
+
- 変数が同じブロックスコープ内の**現在より上の行で** `let` 宣言されている場合,
|
50
52
|
|
51
53
|
代入されていなくても `undefined` としてエラー無しに参照できる
|
54
|
+
|
55
|
+
(`let`では`var`と違って巻き上げは起こらない)
|
52
56
|
|
53
57
|
- プロパティが代入されていない場合,`undefined`としてエラー無しに参照できる
|
54
58
|
|
2
巻き上げ
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
代入されていなくても `undefined` としてエラー無しに参照できる
|
48
48
|
|
49
|
-
- 変数が同じブロックスコープ
|
49
|
+
- 変数が同じブロックスコープ内で,**現在より上の場所で** `let` 宣言されている場合,
|
50
50
|
|
51
51
|
代入されていなくても `undefined` としてエラー無しに参照できる
|
52
52
|
|
1
他の言語について
test
CHANGED
@@ -31,3 +31,45 @@
|
|
31
31
|
- [$_GET, $_POSTなどを受け取る際の処理](http://qiita.com/mpyw/items/2f9955db1c02eeef43ea)
|
32
32
|
|
33
33
|
- [PHP7で流行って欲しいリクエストパラメータの受け取り方](http://qiita.com/mpyw/items/25abc3e51fddc85e0ec0)
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
なお,PHP以外の他の言語においては,`isset`のようなエラー発生を回避するための仕組みが必要なことは稀です.
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
#### JavaScript (strictモード)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
- 変数が同じ関数スコープにおいて**条件分岐に関わらず** `var` 宣言されている場合,
|
46
|
+
|
47
|
+
代入されていなくても `undefined` としてエラー無しに参照できる
|
48
|
+
|
49
|
+
- 変数が同じブロックスコープにおいて `let` 宣言されている場合,
|
50
|
+
|
51
|
+
代入されていなくても `undefined` としてエラー無しに参照できる
|
52
|
+
|
53
|
+
- プロパティが代入されていない場合,`undefined`としてエラー無しに参照できる
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
上記に該当しない場合は `Reference Error` が発生します.
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
#### Ruby
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
- 変数が同じ関数スコープにおいて**条件分岐に関わらず**代入する記述がある場合,
|
66
|
+
|
67
|
+
代入されていなくても `nil` としてエラー無しに参照できる
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
上記に該当しない場合は `Name Error` が発生します.
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
Pythonはちょっとわかりません,すいません
|