Quando e onde devemos usar a elevação em Javascript [fechado]


11

Eu sou novo em Javascript. Estou aprendendo o conceito de içar em Javascript.
Com base nos tutoriais sobre Javacsript no site da Mozilla , me deparei com essa palavra hoisting. De acordo com esses tutoriais, as variáveis ​​em JavaScript são que você pode se referir a uma variável declarada posteriormente, sem obter uma exceção . Mas, minha pergunta é em que circunstâncias é adequado usar a elevação em um Javascript do lado do cliente ou por que devemos usar a elevação em Javascript. Quais são as suas vantagens?


1
Compartilhar sua pesquisa ajuda a todos. Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você reservou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat

6
@gnat Após toda a pesquisa, se eu tinha entendido este tema, por que eu postei esta pergunta aqui, para discutir e entender o conceito adequadamente
Rudra

2
@Rudra Este não é um fórum de discussão . Além disso, você não mostrou nenhuma prova de que realmente pesquisou isso.
Doval 24/03

5
Sim, mas não é um requisito para fazer perguntas.
Robert Harvey

2
@ Rudra: Lembre-se de que não somos um fórum de discussão. Na verdade, somos um site de perguntas e respostas. As perguntas feitas aqui devem ter o escopo definido como razoavelmente respondível no formato de perguntas e respostas.
Robert Harvey

Respostas:


11

Eu nunca ouvi o termo "içar" usado. Se você está se referindo a esse uso de elevação por Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , pelo que posso entender, ele está simplesmente ecoando Douglas Crockford em Javascript: Boas peças e dizendo que você nunca deve usar o içamento . Sua afirmação no final é que todas as variáveis ​​devem ser declaradas no topo de sua função (como sugerem Crockford e JSLint).

Ou, nas palavras de ChristopherBrown, não é um recurso a ser usado , por assim dizer, mas simplesmente uma peculiaridade relacionada à maneira como o navegador interpreta o Javascript.

Então, resumindo: nunca e em lugar nenhum .


1
Então, por que esse conceito está incluído e sobre o que é esse recurso?
Rudra

@Rudra: O subtópico "Declarações, nomes e içamento" no artigo vinculado por David parece abordar isso muito bem. Qual parte não está clara?
Robert Harvey

@RobertHarvey Eu só quero saber onde e quando eles usam isso. David diz que é utilizada Nunca e em lugar nenhum, mas por que é mostrado como um recurso
Rudra

4
Só porque algo é um recurso não significa que é uma boa ideia. Há muitas razões pelas quais as "características" caem em desuso. Mesmo o seu apêndice não serve a nenhum propósito aparentemente útil, mesmo que provavelmente tenha acontecido nos dias dos homens das cavernas.
Robert Harvey

1
HOisting é um termo da teoria do compilador, especialmente otimização. Já existe há pelo menos 20 anos, mas tornou-se popular por essa peculiaridade do Javascript. Se não fosse chamado de recurso, provavelmente seria um bug.
David.pfx

16

A elevação descreve um recurso de como o Javascript é interpretado pelo navegador e não é um recurso a ser usado.

Ao interpretar o Javascript, os navegadores escolhem as variáveis ​​no nível da função no início da função. Exemplo:

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

No código publicado, ambas as variáveis ​​"dois" e "resultado" existem no início do escopo da função (obviamente, como são declaradas lá.) No entanto, como os navegadores estão "içando" as variáveis, o seguinte se torna código Javascript legal .

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

O efeito líquido aqui é que você tem variáveis ​​em uso antes de declará-las e isso pode causar confusão, especialmente com variáveis ​​de escopo global. Exemplo:

var result = 6;

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

Para evitar confusão, declare suas variáveis ​​na parte superior de uma função.


4
+1: é assim que eu responderia. Não é um recurso a ser usado ou não, é apenas uma propriedade do ambiente a ser levada em consideração.
scrwtp

1

Por quê?

O JavaScript não possui escopo de bloco , o que deve explicar por que as coisas devem subir ao topo.

É útil?

Se você preferir:

var someVariable = someVariable || {};

Em vez disso:

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

Então é útil. Mesmo se você não perceber!

Clarificação

O primeiro exemplo será traduzido para algo assim:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.