Kode adalah sebagai berikut:
<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>
Hal ini akan membuang:
"Uncaught TypeError: objek tidak fungsi"
Jika saya bungkus anonim fungsi call/doa dalam satu set tanda kurung itu akan melaksanakan peringatan, tapi masih memberikan saya sebuah kesalahan. Jika saya menempatkan semi-colon setelah "var postTypes" definisi maka itu akan benar-benar baik-baik saja.
Saya dipimpin untuk percaya bahwa javascript tidak memerlukan semi-kolon, jadi saya'm membuat menebak bahwa ada beberapa aneh associativity aturan fungsi aplikasi yang saya tidak sepenuhnya memahami. Mengapa saya mendapatkan error ini?
Javascript tidak memerlukan semi-kolon, it's hanya menafsirkan akan memasukkan untuk anda on line-istirahat ketika kode menjadi sintaks-kesalahan tanpa itu*.
Sayangnya, kode
var a = new B(args)(stuff)()
ini adalah tidak kesalahan sintaks, sehingga tidak ada ;
akan dimasukkan. (Contoh yang dapat dijalankan adalah
var answer = new Function("x", "return x")(function(){return 42;})();
Untuk menghindari kejutan seperti ini, melatih diri untuk selalu mengakhiri pernyataan dengan ;
.
(*: Hanya jari-aturan. Tidak selalu benar. Penyisipan aturan ini jauh lebih rumit. Ini halaman blog tentang titik koma penyisipan memiliki lebih rinci.)
Kode anda mengalami kasus di mana Otomatis Koma Penyisipan (ASI) proses doesn't terjadi.
Anda tidak harus bergantung pada ASI. Anda harus menggunakan tanda koma untuk benar pernyataan terpisah:
var postTypes = new Array('hello', 'there'); // <--- Place a semicolon here!!
(function() { alert('hello there') })();
Kode anda benar-benar mencoba untuk memanggil array objek.
Aku punya kesalahan yang sama dan butuh beberapa saat untuk menyadari bahwa dalam kasus saya, saya bernama variabel array payInvoices dan fungsi juga payInvoices. Ia bingung AngularJs. Setelah aku berganti nama menjadi processPayments() itu akhirnya berhasil. Hanya ingin berbagi kesalahan ini dan solusi seperti itu butuh waktu yang lama untuk memikirkan hal ini.
Saya mendapatkan kesalahan yang sama dan menghabiskan setengah hari mencoba untuk menemukan solusi. Naomi's jawaban memimpin saya untuk solusi yang saya butuhkan.
Saya input (type=button) memiliki atribut name
itu identik dengan nama fungsi yang dipanggil oleh event onClick. Setelah saya mengubah atribut name
segala sesuatu bekerja.
<input type="button" name="clearEmployer" onClick="clearEmployer();">
berubah menjadi:
<input type="button" name="clearEmployerBtn" onClick="clearEmployer();">