Cek sintaks
Apa hasil dari kode berikut ini?
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)()
P.S. Ada jebakannya :)
Error!
Coba ini:
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // error!
Pesan error pada kebanyakan peramban tidak memberitahukan kita cukup petunjuk tentang hal apa yang salah.
Error muncul karena tidak adanya sebuah titik koma setelah user = {...}
.
JavaScript tidak secara otomatis menyisipkan sebuah tanda titik koma setelah tanda kurung kurawa (user.go)()
, jadi JavaScript membaca kode seperti ini:
let user = { go:... }(user.go)()
Lalu kita juga bisa melihat bahwa ekspresi gabungan semacam itu adalah sebuah panggilan objek { go: ... }
secara sintaks yang juga sebagai sebuah fungsi dengan argumen (user.go)
. Dan hal tersebut juga terjadi pada baris yang sama dengan let user
, jadi objek user
belum didefinisikan, oleh karena itu terjadi error.
Jika kita menyisipkan tanda titik koma, semuanya akan baik-baik saja:
let user = {
name: "John",
go: function() { alert(this.name) }
};
(user.go)() // John
Tolong ingat bahwa tanda kurung kurawa yang merangkap (user.go)
tidak melakukan apapun di sini. Biasanya Biasanya tanda kurung kurawa mengatur urutan operasi, tapi di sini tanda titik-lah (.
) yang berjalan terlebih dulu, jadi tidak ada pengaruh apapun. Hanya tanda titik koma yang berpengaruh.