ES6 menambahkan fungsi panah-lemak ( =>
), yang memiliki dua perbedaan utama dari fungsi normal:
- sintaksis yang lebih pendek (termasuk pengembalian implisit jika Anda menggunakan satu-ekspresi tubuh)
- mewarisi
this
dari lingkup sekitarnya
Keduanya adalah fitur yang sangat berguna, tetapi bagi saya tampaknya benar-benar terpisah dalam nilai dan aplikasinya - kadang-kadang saya menginginkan satu, atau yang lain, atau keduanya, atau tidak sama sekali. Tampaknya aneh bahwa jika saya ingin menggunakan fungsi pendek sintaks, saya harus juga menggunakan this
perilaku -modifying. Dan sebaliknya. Saya tidak melihat mengapa kedua kemampuan ini diterapkan sebagai tambahan tunggal untuk bahasa tersebut.
Bagaimana jika saya ingin menggunakan fungsi sintaks pendek untuk pengembalian implisit dan singkatnya (dalam beberapa konteks di mana penuh function (..) { return ...}
akan sedikit kurang terbaca), tetapi saya ingin menggunakan this
dalam fungsi saya untuk merujuk ke konteks panggilan? Tidak ada cara untuk melakukan ini.
CoffeeScript memiliki fungsi keduanya ->
dan =>
style, dan tampaknya ES6 meminjam =>
style dari sana. Jadi pertanyaan saya adalah, mengapa ES6 juga tidak meminjam ->
gaya?
sumber
arguments
keduanya.this
ke penutupan dalam deklarasi fungsi penuh. Ini mungkin bukan bagian yang Anda khawatirkan.Jawaban:
Lihat proposal untuk menambahkan fungsi panah: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
Apa yang dikatakannya adalah:
Anda juga dapat melihat beberapa diskusi tentang versi proposal sebelumnya yang memang memiliki -> sintaks juga: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Tampaknya turun sebagai berikut:
->
dianggap jarang berguna, dan merupakan senjata kaki.sumber
function()
gaya yang mengikat ini adalah kesalahan dan merupakan kutil pada bahasa. Jika mereka bisa, mereka akan berubahfunction()
menjadi=>
semantik, tetapi mereka tidak bisa karena itu akan merusak kompatibilitas.function()
untuk mewarisithis
dari lingkup sekitarnya seperti=>
halnya? Dalam hal itu, bukankahthis
hanya merujuk ke objek global di mana saja? Kedengarannya aneh. Di mana Anda mendengar itu?