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

回答編集履歴

3

メンテナンス性が高い

2017/08/01 10:34

投稿

think49
think49

スコア18194

answer CHANGED
@@ -56,7 +56,7 @@
56
56
  })();
57
57
  ```
58
58
 
59
- ただし、グローバルオブジェクトが後から変更される可能性を考慮すると、`Function#call` で明示的にグローバルオブジェクトを渡す方がメンテナンス性が高いといえます。
59
+ ただし、グローバルオブジェクトが後から変更される可能性を考慮すると、`Function#call` で明示的にグローバルオブジェクトを渡す方が**メンテナンス性が高い**といえます。
60
60
  ブラウザにおけるグローバルオブジェクトはHTML文書の数だけ存在しますが、`Function#call` でグローバルオブジェクトを渡す設計なら、別のグローバルオブジェクトを渡す事で内部のグローバルオブジェクトを一括してスイッチさせることが出来ます。
61
61
 
62
62
  Re: aaaaaaaa さん

2

非Strict Mode \(Non strict mode, Sloppy mode\)

2017/08/01 10:34

投稿

think49
think49

スコア18194

answer CHANGED
@@ -43,4 +43,20 @@
43
43
  </script>
44
44
  ```
45
45
 
46
+ ### 非Strict Mode (Non strict mode, Sloppy mode)
47
+
48
+ > strictではないときは、質問文にあるように「callを使って即時関数内でwindowを参照しているthisに対して、同じくwindowを参照しているthisを参照する」という状態になってしまうという認識であっておりますか。
49
+
50
+ その通りです。
51
+ 非Strict Modeならば、`this` のデフォルト値はグローバルオブジェクトなので、`Function#call` を使わなくても結果は変わりません。
52
+
53
+ ```JavaScript
54
+ (function() {
55
+ console.log(this === window); // true
56
+ })();
57
+ ```
58
+
59
+ ただし、グローバルオブジェクトが後から変更される可能性を考慮すると、`Function#call` で明示的にグローバルオブジェクトを渡す方がメンテナンス性が高いといえます。
60
+ ブラウザにおけるグローバルオブジェクトはHTML文書の数だけ存在しますが、`Function#call` でグローバルオブジェクトを渡す設計なら、別のグローバルオブジェクトを渡す事で内部のグローバルオブジェクトを一括してスイッチさせることが出来ます。
61
+
46
62
  Re: aaaaaaaa さん

1

strcit -> strict

2017/08/01 10:27

投稿

think49
think49

スコア18194

answer CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  ```HTML
17
17
  <script>
18
- 'use strcit'
18
+ 'use strict'
19
19
  console.log(this === window); // true
20
20
  </script>
21
21
  ```
@@ -24,7 +24,7 @@
24
24
 
25
25
  ```HTML
26
26
  <script>
27
- 'use strcit'
27
+ 'use strict'
28
28
  (function() {
29
29
  console.log(this === window); // false
30
30
  console.log(this === undefined); // true
@@ -36,7 +36,7 @@
36
36
 
37
37
  ```HTML
38
38
  <script>
39
- 'use strcit'
39
+ 'use strict'
40
40
  (function() {
41
41
  console.log(this === window); // true
42
42
  }.call(this));