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
이이 명령문 다음에 오는 경우 논리적으로 오른쪽에서 시작해야합니다. 그렇지 않으면 값 또는 var1
및 var2
정의되지 않은 것입니다.
var 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
쉼표 연산자는 실제로 가장 권한이 적은 연산자이지만 괄호가 가장 권한이 높으며 한 줄 식을 만들 때 직접 사용됩니다.
결국 하드 코딩 된 값이 아닌 '썽크'가 필요할 수 있으며, 나에게 썽 크는 함수와 결과 값 (동일한 '사물')입니다.
const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk
windowInnerHeight(); // a thunk
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;
이 시도:
var var1=42;
var var2;
alert(var2 = var1); //show result of assignment expression is assigned value
alert(var2); // show assignment did occur.
첫 번째 경고에서 단일 '='에 유의하십시오. 할당 식의 결과가 할당 된 값임을 나타내고 두 번째 경고는 할당이 발생했음을 나타냅니다.
논리적으로 할당은 오른쪽에서 왼쪽으로 연결되어야합니다. 그러나 이것은 자바 스크립트 (스레딩이 없음)의 모든 원자이므로 특정 엔진은 실제로 약간 다르게 최적화하도록 선택할 수 있습니다.
It is clear by now, that they are not the same. The way to code that is
var var1, var2, var3
var1 = var2 = var3 = 1
And, what about let assigment? Exactly the same as var, don't let the let assigment confuse you because of block scope.
let var1 = var2 = 1 // here var2 belong to the global scope
We could do the following:
let v1, v2, v3
v1 = v2 = v3 = 2
Note: btw, I do not recommend use multiple assignments, not even multiple declarations in the same line.
coffee-script
can accomplish this with aplomb..
for x in [ 'a', 'b', 'c' ] then "#{x}" : true
[ { a: true }, { b: true }, { c: true } ]
참고URL : https://stackoverflow.com/questions/1758576/multiple-left-hand-assignment-with-javascript
'IT' 카테고리의 다른 글
데이터베이스의 모든 사용자에 대한 모든 권한 / 액세스를 찾는 SQL Server 쿼리 (0) | 2020.05.21 |
---|---|
UITableView에서 단일 UITableViewCell을 새로 고칠 수 있습니까? (0) | 2020.05.21 |
C #과 .NET의 차이점은 무엇입니까? (0) | 2020.05.21 |
SQL Server 2008의 쿼리 선택 결과에서 테이블을 만드는 방법 (0) | 2020.05.21 |
사용자가 위로 스크롤하지 않으면 overflow div를 맨 아래로 스크롤 한 상태로 유지 (0) | 2020.05.21 |