[解決済み] NodeJSの'global'オブジェクトとは?
質問
の挙動が変なんですが。
this
キーワードの奇妙な挙動を発見しました。コードでリストアップしています。私はこのコードを
NodeJS v6.x
で、1つの
JavaScript
ファイルを作成します。
以下のような1行のコードでテストしている間、あるなしに関わらず
'use strict'
ステートメントがあってもなくても、これは空のオブジェクトを指しています。
{}
.
console.log(this)
しかし、このステートメントを自己実行関数の中で実行すると、次のようになります。
(function(){
console.log(this);
}());
すごく大きなオブジェクトを出力していますね。で作成されたグローバル実行コンテキスト・オブジェクトが表示されているように見えます。
NodeJS
環境にあるようです。
また、上記の関数を実行する際に
'use strict'
ステートメントで実行すると、予想通り
undefined
(function(){
'use strict';
console.log(this);
}());
しかし、ブラウザで作業している間(私は
Chrome
でしかテストしていません)、最初の三つの例では
window
オブジェクトを生成し、最後のものは
undefined
を期待通りに返してくれました。
ブラウザの動作は非常に理解しやすいものです。しかし
NodeJS
の場合、関数の内部でラップするまでは実行コンテキストを作成しないのでしょうか?
で、ほとんどのコードは
NodeJS
のコードのほとんどは、空の
グローバル
object
?
どのように解決するのですか?
ブラウザでは、グローバルスコープが
window
オブジェクトですが、nodeJSではモジュールのグローバルスコープはモジュールそのものなので、nodeJSモジュールのグローバルスコープで変数を定義すると、そのモジュールのローカルになります。
このことについては NodeJSのドキュメント と書いてあるところ。
グローバル
<Object> The global namespace object.
ブラウザでは、最上位のスコープがグローバルスコープとなります。つまり ブラウザでは、グローバルスコープの var で何かがグローバル変数を定義します。 グローバル変数を定義します。Node.jsではこれは違います。トップレベルのスコープは Node.jsのモジュールの中にあるvar somethingは、そのモジュールのローカル変数になります。 はそのモジュールにローカルになります。
と書くと、あなたのコードでは
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] ECMAScriptとは?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる