LoginSignup
10
4

More than 5 years have passed since last update.

即時関数を使った時の「is not a function」や「is not defined」のメモ

Posted at

即時関数など丸括弧で覆う場合はその前にセミコロンが必要。
セミコロンあまり使ってなくてはまってしまったのでメモ。

Uncaught TypeError: (intermediate value)(…) is not a function
ここの115の回答にあるけども、


window.Glog = function(msg) {
  console.log(msg);
}; // <--- Add this semicolon

(function(win) {
  // ...
})(window);

『ECMAScript仕様には、自動セミコロン挿入のための特別な規則がありますが、この場合、次の行で始まるカッコで囲まれた式は関数呼び出しの引数リストとして解釈できるため、セミコロンは自動的に挿入されません。』(自動翻訳)
これと同じことらしい


window.Glog = function(msg) {
  console.log(msg);
}(function(win) {
  // ...
})(window);

つまり、'('前にセミコロンがないと'(...)'がその前にある文字の引数になってしまうらしい。
だから';(...)'だとか、単純に'(...)'の前にある式や文の末尾にセミコロンを付ければいいらしい。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4