回答編集履歴

7

るby

2016/03/09 19:32

投稿

mpyw
mpyw

スコア5223

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

2016/03/09 19:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
 
68
68
 
69
- - 変数が同じ関数スコープにおいて**条件分岐に関わらず**代入する記述がある場合,
69
+ - 変数が同じ関数スコープにおいて**条件分岐に関わらず現在より上の行で**代入する記述がある場合,
70
70
 
71
71
  代入されていなくても `nil` としてエラー無しに参照できる
72
72
 

5

Ruby補足

2016/03/09 19:26

投稿

mpyw
mpyw

スコア5223

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

何か一行に入りきらなかったので調整

2016/03/09 19:22

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- - 変数が同じ関数スコープにおいて**条件分岐や書かれている場所に関わらず** `var` 宣言されている場合,
45
+ - 変数が同じ関数スコープにおいて**条件分岐や書かれ場所に関わらず** `var` 宣言されている場合,
46
46
 
47
47
  代入されていなくても `undefined` としてエラー無しに参照できる
48
48
 

3

巻き上げ

2016/03/09 19:09

投稿

mpyw
mpyw

スコア5223

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
- - 変数が同じブロックスコープ内で,**現在より上の場所で** `let` 宣言されている場合,
51
+ - 変数が同じブロックスコープ内**現在より上ので** `let` 宣言されている場合,
50
52
 
51
53
  代入されていなくても `undefined` としてエラー無しに参照できる
54
+
55
+ (`let`では`var`と違って巻き上げは起こらない)
52
56
 
53
57
  - プロパティが代入されていない場合,`undefined`としてエラー無しに参照できる
54
58
 

2

巻き上げ

2016/03/09 19:08

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  代入されていなくても `undefined` としてエラー無しに参照できる
48
48
 
49
- - 変数が同じブロックスコープにおいて `let` 宣言されている場合,
49
+ - 変数が同じブロックスコープ内で,**現在より上の場所で** `let` 宣言されている場合,
50
50
 
51
51
  代入されていなくても `undefined` としてエラー無しに参照できる
52
52
 

1

他の言語について

2016/03/09 19:03

投稿

mpyw
mpyw

スコア5223

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はちょっとわかりません,すいません