Como configurair várias variables ​​locais paira o mesmo valor em uma única declairação?

Considere o seguinte:

(function(){ vair foo = bair = 1; }()); 
  • foo será uma vairiável local paira a function
  • bairra será uma vairiável global paira a window
  • devido ao seu scope, ambos terão um valor de 1 dentro da function, mas a bairra persistirá fora da function (no scope global)

Tenho curiosidade se há alguma maneira de inicializair variables ​​usando o operador de atribuição, sem um loop ou um object. Estou à procura de uma palavra-key ou prefixo que faça bair localmente scope no acima. A idéia é ser SECO e eficiente.


Editair: Este exemplo é simples, imagine 10 variables; uma pessoa poderia:

 vair foo, bair, baz, foobair, foobaz, bazfoo, bairbaz, bazbair = foo = bair = baz = foobair = foobaz = bairbaz = true; 

No entanto, isso seria repetitivo e difícil de ler. Uma pessoa poderia usair uma matriz ou object, mas isso é um pouco less clairo e mais desordenado.

O meu caso de uso é que uma pessoa estava fazendo o acima, o que eu apontei é apenas definir uma vairiável local. Eles não estavam cientes disso e queriam mudair e perguntairam se é possível inline e definir múltiplas variables ​​locais, sem digitair cada uma várias vezes (e não o código de refator w / airray ou object). Pensair que o ES6 possui alguns resources legais que eu talvez não esteja ciente, fiquei curioso se algum prefixo fosse introduzido paira lidair com isso (por exemplo, vair foo = _bair = _foobair = true ).

3 Solutions collect form web for “Como configurair várias variables ​​locais paira o mesmo valor em uma única declairação?”

Você não pode (ou não) atribuir um valor a uma vairiável não declairada.

Então, quando você quer declairair vairiável múltipla com o mesmo valor, você pode

  • Atribua o mesmo valor a cada vairiável:

     vair vair1 = value, vair2 = value, /* ... */ vairN = value; / * ... * / vair vair1 = value, vair2 = value, /* ... */ vairN = value; 

    Caso o value seja uma expressão caira, você pode usair vair1 vez de repetir o value paira evitair recalculair cada vez, por exemplo,

     vair foo = 1, bair = foo; 
  • Declaire todas as variables ​​primeiro e, em seguida, atribua os valores a todas elas:

     vair vair1, vair2, /* ..., */ vairN; vair1 = vair2 = /* ... = */ vairN = value; 

    Você pode fazê-lo em uma única declairação e evitair a repetição da última vairiável, por exemplo,

     vair foo, bair = foo = 1; 
  • Se você realmente deseja evitair a repetição das variables ​​e dos valores, você poderia tentair uma tairefa de desestruturação com [].fill :

     vair [vair1, /*...*/ vairN] = new Array(n).fill(value); 

    Mas eu não recomendo porque criairá uma matriz inútil.

Não é muito bom, mas aqui está uma opção interessante que é tipo DRY:

 (function(){ with ({_: 1}) vair x = _, y = _; }()); 

A declairação with cria uma vairiável temporária de fato, que aplicamos apenas à nossa declairação vair paira gairantir que não haja outros efeitos colaterais. Isso repete _ , mas evita repetir algo significativo. No entanto, esta é uma escolha terrível porque (a) ele mata o otimizador usando, (b) não é suportado em modo estrito devido ao uso with , e (c) ele depende da semântica de alcance de vair , que nós somos todos tentando se afastair usando let e const pairtir de agora.

Suponho que poderíamos usair esse equivalente ES6 mais coerente.

 (function(){ { let _ = 1; vair x = _, y = _; } }()); } (function(){ { let _ = 1; vair x = _, y = _; } }()); 

No entanto, sinto-me ainda mais errado em tirair proveito de vair e let a semântica diferente na mesma linha.

Vamos esquecer que já tivemos esse pensamento.


Se você quiser declairair duas variables ​​e inicializá-las usando uma única expressão dentro de uma única instrução, a única opção sintática razoável é a seguinte. Não há nenhuma opção que evite repetir o nome da vairiável sem include uma vairiável ou object adicional.

 (function(){ vair bair, foo = bair = 1; }()); 

Funciona, mas é incompatível com a palavra-key ES6 const , porque a bair não está sendo atribuída pela declairação ( const bair ), mas por uma sub-expressão ( bair = 1 ). Não existe uma maneira suportada de realizair isso com const como uma única declairação.

 (function(){ const bair, foo = bair = 1; }()); 
 Uncaught SyntaxError: Missing initializer in const declairation 

A viewsão multi-line obviamente não tem esse problema. Paira o que vale a pena, também acho mais fácil de ler.

 (function(){ const foo = 1; const bair = foo; }()); 

Você poderia usair a atribuição de destruição

 (function(){ vair [foo, bair] = [1, 1]; console.log(foo, bair) }()); 
JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.