質問: グローバルオブジェクトにnameプロパティを追加している、という意味ではないのでしょうか?
回答: KSwordOfHasteさんが答えきってるので、ちょっとした雑学でもぶら下げます。 そもそもグローバル変数を作る用途って、 大抵がこの2種類なので別の方法でもし代用出来れば使う必要はありません。 * クラスや関数を共有 * 値をシングルトンとして複数箇所で閲覧 Node.jsはCommomJS由来のrequireあたりの作りがよく出来てて、 requireで実行された外部のjsファイルの挙動はこんな感じになります。 * require先のコードを読み込む * ファイル用のスコープを生成 * 一通りコードを実行しきる * (コード内で)`module.exports = value`として代入する(最も推奨されるのがこれ) * module.exportsをrequireの実行結果として持ち帰る * 実行したmodule.exportsの中身はrequire関数のプロパティにキャッシュとして保存され、2度目以降は代入済みの値を即返す この上手い感じの実装により、グローバル変数を利用すること無く、 関数はもちろん、シングルトンも実現できるのです。 ``` $ ls index.js singleton.js show.js ``` 各ファイルの実装はこんな感じ ``` // index.js var user = require('./singleton.js'); user.name = 'jiro'; user.age = 17; console.log(user); require('./show.js'); // singleton.js module.exports = { name: 'taro', age: 18 } // show.js var user = require('./singleton.js'); console.log(user); ``` ``` $ index.js { name: 'jiro', age: 17 } { name: 'jiro', age: 17 } ``` index.js側のconsole.logの実行結果は`{ name: 'jiro', age: 17 }`になるのは一目で分かりますが、 その後に実行されたshow.jsも`{ name: 'taro', age: 18 }`ではなく、jiroのデータになっています。 実行結果のキャッシュというルールによりindex.jsが行った修正内容が残っていることが分かります。 ※まぁDI覚えればこんな使い方のシングルトンも不要なんで、完全に余談ですけどね。 ブラウザに搭載されているJavaScriptはrequireはないので、 考えなしに使いまくるとグローバル変数がすぐに衝突します。 そのため、ベストプラクティスとしてグローバル変数汚染を必要最小限で抑えるためのテクニックが色々と存在します。 クロージャーなんかもそれですが、元になっている変数スコープの知識というのは覚えておいた方が何かと便利ですね。 という訳で、書籍ではわりと早い段階で変数スコープ周りの解説が載ってるんじゃないかなと思います。