var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
왜 아래 오류가 발생합니까? 세미콜론 ;
가 제 1 라인의 마지막에 추가하는 경우정의되지 않은 'forEach'속성을 읽을 수 없습니다.
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
그러나 오류가 사라진다.
var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
왜 아래 오류가 발생합니까? 세미콜론 ;
가 제 1 라인의 마지막에 추가하는 경우정의되지 않은 'forEach'속성을 읽을 수 없습니다.
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
그러나 오류가 사라진다.
첫 번째 줄 끝에는 세미콜론이 없습니다. 그래서 두 줄이 함께 실행하고,이
[][1, 2].forEach((i) => funcs.push(() => i ))
표현에 funcs
의 설정 값으로 해석됩니다 당신이 빈 상태 (empty)의 배열의 인덱스 2에 액세스하려는 있도록 1, 2
, 단지 2
(comma operator)이된다 :
[][2] // undefined
undefined
에는 forEach
메서드가 없습니다. 이 문제를 해결하려면 줄 끝 부분에 세미콜론을 넣어야합니다. 그렇지 않으면 수행중인 내용을 확실히 알고 있어야합니다.
"표현식 1, 2는 단지 2가됩니다." – naveen
@naveen JavaScript는 'a, b, c'와 같은 표현식을 보게되면 모든 하위 표현식을 순서대로 'a'다음에 'b'다음에 'c'로 평가 한 다음 마지막 하위 값을 반환합니다 -expression ('c'). 이것은 유용하다. 'for' 루프의 첫 번째 줄처럼 이전 표현식이 표현식 만 허용되는 상황에서 부작용에 사용되는 경우입니다. – rvighne
세미콜론을 사용해야하는 이유에 대한 고전적인 예가 필요하지 않은 경우가 많이 있습니다. – jfriend00
funcs의 변수 선언에 변수에 속한 것으로 인스턴스화 한 익명 배열이 포함되지 않도록하고 배열의 모든 요소를 'funcs'로 푸시하려고하는 경우 세미콜론을 유지하십시오. 다음과 같이 표시되어야합니다 :
[1, 2].forEach((i) => funcs.push(i))
숫자를 반환하는 함수로 숫자를 변환하는 것은 상당히 의도적 인 변수 이름에서 오히려 분명하다고 생각합니다. 사실이 아니라면, 명백한 해결책은 단순히 'var funcs = [1, 2];' – HonoredMule
줄에 세미콜론을 추가해야합니다. 이 코드는'var funcs = [] [1, 2] .forEach ... '로 보여졌습니다. – epascarello
'.forEach()'대신'.map()'을'var funcs = [1 , 2] .map ((i) =>() => i)'세미콜론으로 인한 문제를 피하기 위해서 – guest271314