javascript - 변수 이름 승격에 대한 질문이 있습니까?
巴扎黑
巴扎黑 2017-06-12 09:32:55
0
5
571

다음 코드를 실행하면 undefined

이 됩니다. 으아악

설명'a' in windowtrue 그런데 언제 선언됐나요? 말해주세요, 감사합니다!

코드를 다음으로 변경했습니다:

으아악

결과a is not defined。 既然 a가 선언되었는데, 이 오류가 보고되는 이유는 무엇인가요?

巴扎黑
巴扎黑

모든 응답(5)
黄舟

변수 개선부터 먼저 이야기해볼까요

으아악

이 코드가 if의 코드 블록에 들어가든 안 들어가든 상관없이 a는 여전히 존재합니다

JavaScript가 실행되면 var를 통해 정의된 모든 변수선언적 함수가 현재 범위의 최상위로 승격되기 때문입니다

var을 통해 생성된 변수에는 블록 수준 범위가 없으므로 현재 함수 범위의 최상위로 승격됩니다

전역 범위에 정의된 변수는 모두 창의 속성입니다

이 코드는 실제로 이 순서대로 실행됩니다

으아악

정의됨 a,但没有赋值,自然输出了 undefined

!'a' in window에 대해 실제로는 'a' 문자열이 먼저 실행되고 ! 'a' in window 其实是先对 'a' 字符串执行,得到了falsewindow 里没有 window.false 这个属性,返回了 falsenon

, false, window에는 window.false 속성이 없으며 if 코드 블록을 입력하지 않으면 false가 반환됩니다.

다음 예를 시도해 볼 수 있습니다

으아악

두 번째 질문

으아악 var 定义(不存在提升),又没进 if위 내용을 이해하고 나면 매우 간단합니다.

(프로모션 없음)을 정의해도 소용이 없으며, 🎜가 입력되지 않아 정의되지 않고 오류가 보고됩니다. 🎜
大家讲道理

이 실행에는 아무런 문제가 없습니다. ! 'a' in window这个是false,然后a的赋值没执行,再console不就是undefined么。
如果想让赋值执行,判断条件改成!('a' in window)그렇습니다.

그래도 이해가 되지 않는다면 연산자 우선 순위 목록을 확인하세요.

代言

var선언할 때 변수 승격이 발생합니다. 편집 단계에서 코드 선언은 함수나 코드의 시작 부분에 배치되므로 다음과 같습니다.

으아악

그래서a in windowtrue.

에 관해서는

으아악

코드에 var a。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a123

이 포함되어 있지 않습니다.

https://developer.mozilla.org...

阿神

첫 번째 문단을 잘못 이해하셨습니다
'a' in window must be false'a' in window 为 false
!'a' in window 才为 true
才会执行 var a = 123;!'a' in window must be true
var a가 실행됩니다 = 123 ;

123이라는 값이 할당된 a 만 있습니다🎜
学习ing

팬더 상정지에=_=

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿