オライリー本のオブジェクト指向JavaScriptの原則にてグローバル変数の解説で以下のようなコードがありました。
javascript
1function say() { 2 console.log(this.name); 3} 4 5var person1 = { 6 name: "Nico", 7 say: say 8}; 9 10var person2 = { 11 name: "Greg", 12 say: say 13}; 14 15var name = "Michael"; 16 17person1.say(); 18// => "Nico" 19 20person2.say(); 21// => "Greg" 22 23say(); 24// => "Michael" 25 26//実際はMichaelではなくundefinedが表示される 27 28//var name = "Michael" 29//ではなく 30//name = "Michael" 31//とすると 32//Michaelが表示されることが確認できた。
person1とperson2のsay()については、thisがそれぞれpersonのオブジェクトに割り当てられるためNicoとGregが出力されるのは分かるのですが
var nameでグローバル変数のnameに"Michael"が代入されているはずなのにsayを実行するとundefinedになってしまっています。
書籍内でもMichaelが期待される出力なのですが、これは何故なのでしょうか?
グローバル変数として定義 = グローバルオブジェクトにnameプロパティを追加している、という意味ではないのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/01 03:15