Коли і де ми повинні використовувати підйомники в Javascript [закрито]


11

Я новачок у Javascript. Я вивчаю концепцію підйому в Javascript.
На основі навчальних посібників Javacsript на веб-сайті Mozilla я натрапив на це слово hoisting. Відповідно до цих навчальних посібників, змінні в JavaScript - це те, що ви можете посилатися на змінну, оголошену пізніше, не отримуючи винятку . Але моє запитання полягає в тому, за яких обставин підходить використання вантажопідйомних пристроїв у клієнтському JavaScript або чому ми повинні використовувати підйомники в Javascript. Які його переваги


1
Обмін дослідженнями допомагає всім. Розкажіть, що ви пробували і чому це не відповідало вашим потребам. Це свідчить про те, що ви знайшли час, щоб спробувати допомогти собі, це позбавляє нас від повторення очевидних відповідей, а найбільше це допомагає вам отримати більш конкретну та релевантну відповідь. Також дивіться Як просити
gnat

6
@gnat Після всіх досліджень, якщо я зрозумів цю тему, навіщо я поставив це питання тут, щоб правильно обговорити та зрозуміти концепцію
Рудра

2
@Rudra Це не дискусійний форум. Більше того, ви не показали жодних доказів того, що ви насправді досліджували це.
Доваль

5
Так, але це не вимога для запитань.
Роберт Харві

2
@Rudra: Пам’ятайте, що ми не є дискусійним форумом. Ми насправді на сайті Q&A. Питання, що задаються тут, повинні бути визначені таким чином, щоб вони відповідали у форматі Q&A.
Роберт Харві

Відповіді:


11

Я ніколи не чув поняття «вантажопідйомник». Якщо ви маєте на увазі таке використання вантажопідйомних робіт Бен Черрі: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , то з того, що я можу зібрати, він просто лунає Дугласом Крокфордом з Javascript: Хороші деталі та кажуть, що ніколи не слід використовувати підйомники . Його твердження в кінці полягає в тому, що всі змінні повинні бути оголошені у верхній частині вашої функції (як підказують Крокфорд та JSLint).

Або, за словами містера КрістоферБроуна, це не функція використання , скажімо, а просто химерність, пов’язана з тим, як браузер інтерпретує Javascript.

Отже, коротше: ніколи і ніде .


1
Тоді, чому це поняття включено і в чому ця особливість?
Рудра

@Rudra: Підтема «Декларації, імена та підняття» у статті, яку Девід пов’язав, схоже, це досить добре висвітлює. Яка частина незрозуміла?
Роберт Харві

@RobertHarvey Я просто хочу знати, де і коли вони цим користуються. Девід каже, що він використовується ніколи і ніде, але чому його показують як особливість
Рудра

4
Просто те, що щось є особливістю, не означає, що це гарна ідея. Існує багато причин, чому "риси" не прихильні. Навіть ваш додаток не виконує жодних корисних цілей, хоча це, мабуть, було ще за печерних людей.
Роберт Харві

1
Холістінг - це термін із теорії компілятора, особливо оптимізації. Це існувало щонайменше 20 років, але воно стало популярним завдяки цій особливості Javascript. Якби його не називали функцією, це, ймовірно, буде помилка.
david.pfx

16

Підняття описує особливість того, як Javascript інтерпретується браузером, і не стільки функція, яку слід використовувати.

При інтерпретації Javascript браузери застосовують змінні рівня функції на початку функції. Приклад:

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

У розміщеному коді обидві змінні "два" та "результат" існують на початку дії функції (очевидно, оскільки вони там оголошені.) Однак, оскільки браузери "піднімають" змінні, наступне стає законним кодом Javascript .

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

Чистий ефект тут полягає в тому, що у вас є застосовані змінні, перш ніж їх оголосити, і це може спричинити плутанину, особливо зі змінними глобальної області. Приклад:

var result = 6;

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

Щоб уникнути плутанини, оголосьте свої змінні у верхній частині функції.


4
+1: саме так я б відповів. Це не особливість використовувати чи не використовувати, це лише властивість середовища враховувати.
scrwtp

1

Чому?

У JavaScript немає області застосування блоку , це повинно пояснити, чому все повинно підніматися до вершини.

Це корисно?

Якщо ви віддаєте перевагу цьому:

var someVariable = someVariable || {};

Замість цього:

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

Тоді це корисно. Навіть якщо ви цього не помічаєте!

Очищення

Перший приклад перекладе на щось подібне:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.