Kapan dan Di mana kita harus menggunakan hoisting dalam Javascript [ditutup]


11

Saya baru mengenal Javascript. Saya sedang belajar konsep mengangkat dalam Javascript.
Berdasarkan tutorial Javacsript di situs web Mozilla , saya menemukan kata ini hoisting. Menurut tutorial tersebut, variabel dalam JavaScript adalah Anda dapat merujuk ke variabel yang dideklarasikan nanti, tanpa mendapatkan pengecualian . Tapi, pertanyaan saya adalah pada keadaan apa itu cocok untuk menggunakan mengangkat di Javascript sisi klien atau mengapa kita harus menggunakan mengangkat di Javascript. Apa kelebihannya.


1
Berbagi penelitian Anda membantu semua orang. Beri tahu kami apa yang telah Anda coba dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling utama itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Lihat juga Cara Meminta
nyamuk

6
@gnat Setelah semua penelitian, jika saya memahami topik ini, mengapa saya harus memposting pertanyaan ini di sini, untuk membahas dan memahami konsep dengan benar
Rudra

2
@Rudra Ini bukan forum diskusi . Selain itu, Anda belum menunjukkan bukti apa pun bahwa Anda sebenarnya telah meneliti ini.
Doval

5
Ya, tapi itu bukan persyaratan untuk mengajukan pertanyaan.
Robert Harvey

2
@Rudra: Ingatlah bahwa kami bukan forum diskusi. Kami sebenarnya adalah situs tanya jawab. Pertanyaan yang diajukan di sini harus dicakup untuk dapat dijawab secara wajar dalam format tanya jawab.
Robert Harvey

Jawaban:


11

Saya tidak pernah mendengar istilah "mengangkat" digunakan. Jika Anda mengacu pada penggunaan mengangkat ini oleh Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , maka dari apa yang saya dapat kumpulkan, ia hanya menggemakan Douglas Crockford dari Javascript: The Bagian yang baik , dan mengatakan bahwa Anda tidak boleh menggunakan mengangkat . Pernyataannya di akhir adalah bahwa semua variabel harus dideklarasikan di bagian atas fungsi Anda (seperti yang disarankan Crockford dan JSLint).

Atau, dalam kata-kata Mr. ChristopherBrown, ini bukan fitur untuk digunakan , per-katakan, tetapi hanya kekhasan yang terkait dengan bagaimana browser menginterpretasikan Javascript.

Jadi, singkatnya: tidak pernah dan tidak ada tempat .


1
Lalu, mengapa konsep ini dimasukkan dan tentang apa fitur ini?
Rudra

@Rudra: Subtopik "Deklarasi, Nama, dan Pengangkatan" dalam artikel yang ditautkan oleh David tampaknya mencakup hal ini dengan cukup baik. Bagian mana yang tidak jelas?
Robert Harvey

@RobertHarvey Saya hanya ingin tahu, di mana dan kapan mereka menggunakan ini. David mengatakan itu digunakan tidak pernah dan di mana pun, tetapi mengapa itu ditampilkan sebagai fitur
Rudra

4
Hanya karena sesuatu adalah fitur bukan berarti itu ide yang bagus. Ada banyak alasan mengapa "fitur" tidak disukai. Bahkan apendiks Anda tidak memiliki tujuan yang bermanfaat, meskipun mungkin pada zaman manusia gua.
Robert Harvey

1
HOisting adalah istilah dari teori kompiler, terutama optimasi. Sudah ada setidaknya selama 20 tahun, tetapi dipopulerkan oleh kekhasan Javascript ini. Jika tidak disebut fitur, itu mungkin bug.
david.pfx

16

Hoisting menjelaskan fitur bagaimana Javascript diinterpretasikan oleh browser, dan tidak begitu banyak fitur untuk digunakan.

Saat menafsirkan Javascript, browser tingkat fungsi variabel di awal fungsi. Contoh:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

Dalam kode yang diposting, kedua variabel "dua" dan "hasil" ada di awal lingkup fungsi (jelas, seperti yang dinyatakan di sana.) Namun, karena browser "mengangkat" variabel, berikut ini menjadi kode Javascript yang sah .

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

Efek bersih di sini adalah bahwa Anda memiliki variabel yang digunakan sebelum Anda mendeklarasikannya, dan itu dapat menyebabkan kebingungan, terutama dengan variabel lingkup global. Contoh:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

Untuk menghindari kebingungan, deklarasikan variabel Anda di bagian atas fungsi.


4
+1: ini adalah bagaimana saya akan menjawab. Ini bukan fitur untuk digunakan atau tidak digunakan, itu hanya properti lingkungan untuk dipertimbangkan.
scrwtp

1

Mengapa?

JavaScript tidak memiliki Blok Lingkup , yang harus menjelaskan mengapa hal harus mengerek ke atas.

Apakah itu berguna?

Jika Anda lebih suka ini:

var someVariable = someVariable || {};

Alih-alih ini:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

Maka itu berguna. Bahkan jika Anda tidak menyadarinya!

Klarifikasi

Contoh pertama akan diterjemahkan menjadi seperti ini:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.