상수에서

3597 단어 compat-table

묘사

ES6는 다음과 같은 아키텍처를 지원합니다.
var keys = [];
for (const i in {a: 2, b: 3}) {
    setTimeout(function () {
        keys.push(i);
    });
}
console.assert(keys.indexOf('a') > -1);
console.assert(keys.indexOf('b') > -1);
이것은 const 현식 초기값 설정 항목이 없는 상황에서 허용되는 유일한 상황인 것 같아서 검사할 가치가 있을 수 있습니다.
크롬 43은 테스트를 통과했고 IE11과 Edge는 없었다.
또한 더 깨끗한 테스트는 for-of를 사용하지만 이것은 내가 가입하고 싶지 않은 또 다른 기능이다.

토론 #1

const something;가 작용하지 않습니까?이것은 재분배할 수 없는 변수로 undefined 을 포함할 것이다.
또한 setTimeout 콜백은 자주 반복되는 "last"오류(http://www.mennovanslooten.nl/blog/post/62/- 이런 상황을 피하기 위해서는 (function (i) { setTimeout(function () { keys.push(i); }); }(i))를 해야 한다.규범상 사용 불가

토론 #2

const sth;;나는 많은 경우에 정의되지 않은 상수가 필요하다고 생각하지 않기 때문에 이것은 합리적인 것 같다.
아니오, 봉투로 포장할 필요 없어요.이것이 바로 중점이다. 매 교체 변수마다 새로운 귀속이 있고 우리 모두setTimeout는 하나의 단독 귀속을 전달할 것이다.이것도 내가 여기서 테스트하고 싶은 내용 중의 하나다.

토론 #셋

아하, 잘했어:-) 나는 순환과'var'으로 무릎 점프 반응을 하는 것에 너무 익숙해서 똑똑히 생각하지 못했다.
규범 중 어느 곳에서 이렇게 하는 것을 허락하지 않습니까?Chrome(stable and canary)은 현재 허용되지만 Firefox Nightly와 Babel은 허용되지 않습니다.
이것은 확실히 유용한 테스트로 보인다.

토론 #4

나는 지금AFK이지만, 너는 엄격한 모드에서 테스트를 해야 한다.크롬이 지저분해요.
const가 규범에 맞지 않습니다. (이것도 ES6 이전의 실현이고 Firefox도 마찬가지입니다.)
하나)와 현재 경솔하게 일하지 못하게 하는 모든 것.


Micha Go biowski

토론 #5

는 리콜 계약이 let에 대해 비슷한 테스트를 수행했다고 지적했다.내 생각에는 그렇다
하지만 테스트const도 유용합니다. 왜냐하면let의 경우
지원 브라우저가 부정확한 결과만 주고 거부하도록 합니다
해석 단계의 상수 변수.


Micha Go biowski

토론 #6

참고: 이 테스트(필요!)필요 없음setTimeout(..), 필요 없음let처럼.동기화 디스플레이가 더 깨끗합니다.

토론 #7

그럼요.나는 let의 기능을 검사했다.
변수를 창고에 추가하기 (잠시 후 호출), 더 좋은 방법에 동의합니다.
테스트


Micha Go biowski

토론 #8

는 현재 "for 순환 반복 범위"라는 하위 테스트let가 있습니다.
내가 보기에 이 테스트는 적합할 것이다. for(let 의 출현을 for(const 로 바꿀 것이다.

토론 #9

@claudepache

Currently, there exists a subtest for let called "for-loop iteration scope". It seems to me that that test would be appropriate, replacing occurences of for(let with for(const.


:+1:
편집: 즉 이 테스트의 두 번째 부분(검사let i in)은 매우 유용할 것이다. 첫 번째 부분은 일을 하지 않을 것이다. 왜냐하면 i++를 통해 교체되기 때문이다.

토론 #10

+1 Firefox도 이 테스트를 통과하지 못했습니다.https://bugzilla.mozilla.org/show_bug.cgi?id=1094995

토론 #11

Firefox 45,
for (const i of [1,2]) {
    console.log(i);
}
==> SyntaxError: invalid for/in left-hand side 
for (let i of [1,2]) {
    setTimeout(function () {
        console.log(i);
    })
}
==> 2,2 (Must be 1,2)
#kangax, 표의 Firefox 별수constlet는 반드시 줄여야 합니다. 그렇지 않으면 이것은 정말 오도

토론 #12

입니다. Firefox는 이미 8/10let에 불과합니다. 이 행위("for 순환 교체 범위")는 이미 테스트를 거쳤기 때문입니다.

토론 #13

+1 사례 추가 요청for (const v of [1,2,3]) v; 확인
(원인의 근원이 let의 작용역 문제와 같아도)

토론 #14

네, Firefox 48표에서const 10/10지만 const는 여전히 처리할 수 없습니다for of 순환:
나는 방금 이 문제를 해결하기 위해 홍보관을 만들었다. #758.

좋은 웹페이지 즐겨찾기