2013-02-21 20 views
52

Dlaczego zmienne wciągnika JavaScript?Dlaczego zmienne wciągnika JavaScript?

Jakie były przesłanki projektantów, którzy zdecydowali się na realizację podnoszenia? Czy są inne popularne języki, które to robią?

Proszę podać odpowiednie linki do dokumentacji i/lub zapisów.

+1

["ponieważ javascript naprawdę nie ma prawdziwego sensu określania leksykalnego"] (http://stackoverflow.com/a/3725763/344643), cokolwiek to znaczy –

+0

Nice! wiesz dlaczego ? – Xlaudius

+4

Podejrzewam, że w * tym * punkcie jest to historyczne i poważnie wątpię, że było to coś innego niż "łatwość implementacji". –

Odpowiedz

34

Jak wyjaśnia Stoyan Stefanov w książce "JavaScript Patterns", podnośnik jest wynikiem implementacji interpretatora JavaScript.

Interpretacja kodu JS wykonywana w dwóch przebiegach. Podczas pierwszego przebiegu interpreter przetwarza deklaracje zmiennych i funkcji.

Drugie przejście jest faktycznie krokiem wykonywania kodu. Interpreter przetwarza wyrażenia funkcji i niezadeklarowane zmienne.

Dzięki temu możemy opisać takie zachowanie za pomocą koncepcji "podnośnika".

Mam nadzieję, że to pomoże.

+8

Osobiście nie wyrażam zgody na słowo "podnoszenie".Daje fałszywą reprezentację, że deklaracje zmiennych i funkcji są magicznie podnoszone na szczyt bieżącego zakresu, podczas gdy w rzeczywistości interpreter JS, jak wspomniano, skanuje kod źródłowy wiązań i ** następnie ** wykonuje kod. – contactmatt

+0

Teraz dowiedziałem się, dlaczego JS nie zrozumiał języka, nie widziałem tego w żadnym tutorialu. I myli się z dźwiganiem (i płynnym przepływem). –

+2

To nie wyjaśnia racji. Interpreter jednoprzebiegowy (który nie doprowadziłby do podniesienia) byłby znacznie prostszy - dlaczego więc projektanci zdecydowali się na dwie bramki? – Bergi