Коли і де ми повинні використовувати підйомники в 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.