[javascript] JavaScript를 사용한 다중 왼손 할당

var var1 = 1,
    var2 = 1,
    var3 = 1;

이것은 이것과 같습니다 :

var var1 = var2 = var3 = 1;

변수가 정의 된 순서 인 var3, var2, var1이라고 확신합니다. 이는 다음과 같습니다.

var var3 = 1, var2 = var3, var1 = var2;

JavaScript로 이것을 확인할 수있는 방법이 있습니까? 일부 프로파일 러를 사용하고 있습니까?



답변

사실은,

var var1 = 1, var2 = 1, var3 = 1;

다음 과 동일 하지 않습니다 .

var var1 = var2 = var3 = 1;

차이점은 범위 지정에 있습니다.

function good() {
  var var1 = 1, var2 = 1, var3 = 1;
}

function bad() {
  var var1 = var2 = var3 = 1;
}

good();
console.log(window.var2); // undefined

bad();
console.log(window.var2); // 1. Aggh!

실제로 이것은 과제가 올바른 연관성을 보여줍니다. bad예는 동등하다 :

var var1 = (window.var2 = (window.var3 = 1));


답변

자바 스크립트의 할당은 오른쪽에서 왼쪽으로 작동합니다. var var1 = var2 = var3 = 1;.

이러한 변수 중 하나의 값 1이이 명령문 다음에 오는 경우 논리적으로 오른쪽에서 시작 했어야합니다. 그렇지 않으면 값 또는 var1var2정의되지 않은 것입니다.

var var1 = (var2 = (var3 = 1));가장 내부의 괄호 세트가 먼저 평가되는 위치 와 동등한 것으로 생각할 수 있습니다 .


답변

var var1 = 1, var2 = 1, var3 = 1;

이 경우 var키워드는 세 변수 모두에 적용됩니다.

var var1 = 1,
    var2 = 1,
    var3 = 1;

이것은 이것과 동등하지 않습니다 :

var var1 = var2 = var3 = 1;

이 경우 screens 뒤에 var키워드는 var1변수 게양으로 만 적용 되며 나머지 표현식은 정상적으로 평가되므로 변수 var2, var3전역 변수가됩니다.

Javascript는이 코드를 다음 순서로 처리합니다.

/*
var 1 is local to the particular scope because of var keyword
var2 and var3 will become globals because they've used without var keyword
*/

var var1;   //only variable declarations will be hoisted.

var1= var2= var3 = 1; 


답변

a = (b = 'string is truthy'); // b gets string; a gets b, which is a primitive (copy)
a = (b = { c: 'yes' }); // they point to the same object; a === b (not a copy)

(a && b)논리적으로 (a ? b : a)곱셈 같은 동작합니다 (예. !!a * !!b)

(a || b)논리적으로 (a ? a : b)그리고 또한 같은 동작합니다 (예. !!a + !!b)

(a = 0, b)a진실하고 암묵적으로 돌아온 다면 돌보지 않기로 짧다b


a = (b = 0) && "nope, but a is 0 and b is 0"; // b is falsey + order of operations
a = (b = "b is this string") && "a gets this string"; // b is truthy + order of ops

JavaScript 연산자 우선 순위 (작업 순서)

쉼표 연산자는 실제로 가장 권한이 적은 연산자이지만 괄호가 가장 권한이 높으며 한 줄 식을 만들 때 직접 사용됩니다.


결국, 하드 코딩 된 값보다는 ‘썽크’가 필요할 수 있으며, 나에게 썽 크는 함수와 결과 값 (동일한 ‘사물’)입니다.

const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk

windowInnerHeight(); // a thunk


답변

이 시도:

var var1=42;
var var2;

alert(var2 = var1); //show result of assignment expression is assigned value
alert(var2); // show assignment did occur.

첫 번째 경고에서 단일 ‘=’에 유의하십시오. 할당 식의 결과가 할당 된 값임을 나타내고 두 번째 경고는 할당이 발생했음을 나타냅니다.

논리적으로 할당은 오른쪽에서 왼쪽으로 연결되어야합니다. 그러나 이것은 자바 스크립트 (스레딩이 없음)의 모든 원자이므로 특정 엔진은 실제로 약간 다르게 최적화하도록 선택할 수 있습니다.


답변

지금까지는 동일하지 않다는 것이 분명합니다. 코드를 작성하는 방법

var var1, var2, var3
var1 = var2 = var3 = 1

그리고 어떻습니까? var와 정확히 동일하므로 블록 범위로 인해 어설 션을 혼동하지 마십시오.

let var1 = var2 = 1 // here var2 belong to the global scope

우리는 다음을 할 수 있습니다.

let v1, v2, v3
v1 = v2 = v3 = 2

참고 : btw, 같은 줄에 여러 선언을 사용하지 말고 여러 할당을 사용하지 않는 것이 좋습니다.


답변

coffee-script aplomb으로 이것을 달성 할 수 있습니다 ..

for x in [ 'a', 'b', 'c' ] then "#{x}" : true

[ { a: true }, { b: true }, { c: true } ]