1. ホーム
  2. javascript

[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問

2022-01-24 14:51:02

質問内容

コードは以下の通りです。

<body>
    <a href="javascript:;" id="test">hello</a>
</body>

<script type="text/javascript">
    document.getElementById("test").addEventListener("click", function () {
      test()
    }, false)
    function test() {
      var postTypes = new Array('hello', 'there')
      (function() { alert('hello there') })()
    }
</script>

を投げることになります。

"Uncaught TypeError: object is not a function"

無名関数呼び出し/呼び出しを別の括弧で囲むと、警告は実行されますが、まだエラーが出ます。 var postTypes"の定義の後にセミコロンを置くと、全く問題なく実行されます。

JavaScriptはセミコロンを必要としないと信じていたので、私が十分に理解していない関数の適用に関する奇妙な連想規則があるのではと推測しているのです。なぜこのエラーが出るのでしょうか?

どうすればいいですか?

JavaScriptではセミコロンが必要です。ただ、インタプリタが可能な限り改行で挿入してくれるからです。 * .

残念ながら、このコード

var a = new B(args)(stuff)()

が行います。 ない は構文エラーにならないので ; が挿入されます。(実行可能な例としては

var answer = new Function("x", "return x")(function(){return 42;})();

このような驚きを避けるために、常にステートメントを次のように終わらせるように訓練してください。 ; .


* これはあくまで経験則であり、必ずそうなるとは限りません。挿入のルールはもっと複雑です。これは ブログページ セミコロン挿入について、より詳しく説明しています。