var obj = {
func : function() {
console.log('hello');
}
}
こう書いておいて、
obj.func();
(obj.func)();
と呼ぶと、期待通りに helloが2回表示されるのですが
(obj.func)();
obj.func();
順番を逆にすると、エラーになってしまいます。
TypeError: Cannot read property 'func' of undefined
at Object.<anonymous> (/Users/xxxxx/test.js:7:5)
エラー発生箇所は、最初の呼び出しです。
もうなんでエラーになるのか、わけかわからないです・・。どなたか解説して頂けますでしょうか?
環境はmacで、node.js 0.10.33 です。
var obj = { func : function() { console.log('hello'); } }; // ※ここのセミコロンが大切! (obj.func)(); obj.func();
var obj の変数宣言が明示的に終わっていないので、後続する (obj.func)() の評価で obj が宣言されていないことになってるっぽいです。
var obj = { func : function() { console.log('hello'); } } a = 1; // 文としてはっきりしているものがあれば OK (obj.func)(); obj.func();
でも、セミコロンが無くなると...
var obj = { func : function() { console.log('hello'); } } a = 1 // セミコロンがなくなると、やっぱりエラーに (obj.func)(); obj.func();
TypeError: 1 is not a function
var obj = { func : function() { console.log('hello'); } }; // ※ここのセミコロンが大切! (obj.func)(); obj.func();
var obj の変数宣言が明示的に終わっていないので、後続する (obj.func)() の評価で obj が宣言されていないことになってるっぽいです。
var obj = { func : function() { console.log('hello'); } } a = 1; // 文としてはっきりしているものがあれば OK (obj.func)(); obj.func();
でも、セミコロンが無くなると...
var obj = { func : function() { console.log('hello'); } } a = 1 // セミコロンがなくなると、やっぱりエラーに (obj.func)(); obj.func();
TypeError: 1 is not a function
そういう時は明示的にセミコロンを入れないと文法エラーになります。
var a = {a:1} (1) //error
var a = {a:1} ;(1)
Node.jsでもモジュールを書く時に頭にセミコロンを入れるおまじないをしたりしますでしょ?
(・ω<
2015/04/10 11:04:24競争!?
2015/04/11 05:16:21ありがとうございました!