ES6- 순환 중인 블록 레벨 역할 영역
15779 단어 ES6
for 순환
let
//
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = function () {
console.log(i);
};
}
funcs[0](); // 3
//
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = (function(value){
return function() {
console.log(value);
}
}(i))
}
funcs[0](); // 0
순환 내부에서 함수를 즉시 실행하여 수락된 모든 변수 i에 복사본을 만들고 변수value로 저장합니다
// ES6 let ( 1)
var funcs = [];
for (let i = 0; i < 3; i++) {
funcs[i] = function () {
console.log(i);
};
}
funcs[0](); // 0
여기서 let이 클립을 해결하는 이유는 무엇일까요?
우리가 알고 있는
let , ,
, 그런데 왜 여기서 i값을 정확하게 출력할 수 있습니까?어떤 사람들은 for 순환에서 순환 변수를 설정하는 부분은 하나의 단독 작용역이라고 추측한다.
우리 잠시 위의 문제를 놓아 봅시다~~
먼저 다른 밤을 보고 추측이 정확한지 봅시다.
for (let i = 0; i < 3; i++) {
let i = 'ES6';
console.log(i);
}
// ES6
// ES6
// ES6
우리 var 성명의 변수를 다시 한 번 시험해 봅시다
for (var i = 0; i < 3; i++) {
var i = 'ES6';
console.log(i);
}
// ES6
왜 결과가 달라졌을까, 단독 작용역이 있다면 결과는 같을 텐데...
*주의:
let
, 반드시 let의 향상되지 않은 특성과 관련이 있는 것은 아니다.for 순환에서 let과 var를 사용하면 밑바닥은 서로 다른 처리 방식을 사용합니다.
사실은 위의 코드가 이렇게 해석한 것이다. 바로 for(let i=0;i<3;i++)에서 원괄호 안에 숨겨진 작용역을 만드는 것이다.
,
통속적으로 말하자면 ~~순환할 때마다let은 새로운 변수 i를 만들고 이를 i의 현재 값으로 초기화합니다.
밤 1의 코드는 다음과 같다.
//
(let i = 0) {
funcs[0] = function() {
console.log(i)
};
}
(let i = 1) {
funcs[1] = function() {
console.log(i)
};
}
(let i = 2) {
funcs[2] = function() {
console.log(i)
};
};
let i=6;
for(let i=0;i<3;i++)
{
let i;
console.log(i); //undefied undefied undefied
// {} ()
}
const
그럼 위에 있는 let을 const로 바꿀까요?var funcs = [];
for (const i = 0; i < 10; i++) {
funcs[i] = function () {
console.log(i);
};
}
funcs[0](); // const
for in
우리가 위에서 말한 것은 모두 일반적인 for 순환이다. 그러면 for in 순환에서는?
var funcs = [], object = {a: 1, b: 1, c: 1};
for (var key in object) {
funcs.push(function(){
console.log(key)
});
}
funcs[0]()
var로 출력 결과'c'
let으로 성명하면 결과는'a'입니다.
콘스트는요?오류가 발생하지 않았습니다. 출력 결과는'a'입니다. for in 순환에서 매번 교체할 때마다 기존의 귀속을 수정하지 않고 새로운 귀속을 만들 수 있기 때문입니다.
const의 특징은 블록 레벨 역할 영역에서 반복적으로 설명할 수 없고 값을 다시 부여할 수 없다는 것이다. (중점은 블록 레벨 역할 영역이다.)for in의 매번 순환은 새로운 블록급 작용역이기 때문에 for (const a in b) 형식으로 대상을 훑어볼 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(Javascript) ES6의 주요 특징 정리let을 사용하면 선언한 변수는 블록안에서만 유효하게 된다. const 역시 마찬가지로 블록스코프를 따른다 .const 와 let의 차이점은 const 는 상수로 값을 할당한다는 점이다. 따라서 값을 변경시키려고 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.