다음 코드를 실행하면 undefined
설명'a' in window
为 true
그런데 언제 선언됐나요? 말해주세요, 감사합니다!
코드를 다음으로 변경했습니다:
으아악결과a is not defined
。 既然 a
가 선언되었는데, 이 오류가 보고되는 이유는 무엇인가요?
黄舟2017-06-12 09:34:55
변수 개선부터 먼저 이야기해볼까요
으아악이 코드가 if
의 코드 블록에 들어가든 안 들어가든 상관없이 a는 여전히 존재합니다
JavaScript가 실행되면 var
를 통해 정의된 모든 변수 및 선언적 함수가 현재 범위의 최상위로 승격되기 때문입니다
var
을 통해 생성된 변수에는 블록 수준 범위가 없으므로 현재 함수 범위의 최상위로 승격됩니다
전역 범위에 정의된 변수는 모두 창의 속성입니다
이 코드는 실제로 이 순서대로 실행됩니다
으아악정의됨 a
,但没有赋值,自然输出了 undefined
!'a' in window
에 대해 실제로는 'a'
문자열이 먼저 실행되고 ! 'a' in window
其实是先对 'a'
字符串执行非,得到了false
,window
里没有 window.false
这个属性,返回了 false
non
false
, window
에는 window.false
속성이 없으며 if 코드 블록을 입력하지 않으면 false
가 반환됩니다. 다음 예를 시도해 볼 수 있습니다
으아악
두 번째 질문
으아악
var
定义(不存在提升),又没进 if
위 내용을 이해하고 나면 매우 간단합니다.
大家讲道理2017-06-12 09:34:55
이 실행에는 아무런 문제가 없습니다. ! 'a' in window
这个是false,然后a的赋值没执行,再console不就是undefined么。
如果想让赋值执行,判断条件改成!('a' in window)
그렇습니다.
그래도 이해가 되지 않는다면 연산자 우선 순위 목록을 확인하세요.
代言2017-06-12 09:34:55
var
선언할 때 변수 승격이 발생합니다. 편집 단계에서 코드 선언은 함수나 코드의 시작 부분에 배치되므로 다음과 같습니다.
그래서a in window
是true
.
에 관해서는
으아악코드에 var a
。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a
是123
https://developer.mozilla.org...
阿神2017-06-12 09:34:55
첫 번째 문단을 잘못 이해하셨습니다'a' in window
must be false'a' in window
为 false!'a' in window
才为 true
才会执行 var a = 123;
!'a' in window
must be truevar a가 실행됩니다 = 123 ;