나는 다음과 같은 코드 블록이있어 : 개인 변수가 콘솔에 표시됩니까?
(function(){
a = 1;
alert(a);
})();
내가 크롬에서 콘솔을 열
, 나는1
의 값으로, 변수
a
를 볼 수 있습니다. 그것이 IIFE에 있기 때문에 보이지 않아야합니까? 당신은
a
를 선언하지, 그래서 문
a = 1;
전역 변수가 아닌 지역을 작성
나는 다음과 같은 코드 블록이있어 : 개인 변수가 콘솔에 표시됩니까?
(function(){
a = 1;
alert(a);
})();
내가 크롬에서 콘솔을 열
, 나는1
의 값으로, 변수
a
를 볼 수 있습니다. 그것이 IIFE에 있기 때문에 보이지 않아야합니까? 당신은
a
를 선언하지, 그래서 문
a = 1;
전역 변수가 아닌 지역을 작성
이 코드는 The Horror of Implicit Globals에 먹이를 떨어지고있다. (. 느슨한 모드에서는 다행히, 요즘 우리는 매우 이상한 행동이 항상 있었어야 오류로 변경시킨 엄격 모드을 보유하고 있습니다.)
당신이 a
앞에 var
을 추가하는 경우 :
var a = 1;
... 비공개이므로 해당 기능 내의 중단 점에서 일시 중지되면을 제외한 을 콘솔 내에서 액세스 할 수 없습니다. 함수 내의 중단 점에서 일시 중지 된 경우 함수 범위 내의 모든 항목이 콘솔의 범위에 있습니다 (콘솔을보다 유용하게 만들 수 있음).
그것은 실수로 느슨한 모드에서 글로벌 변수를 생성 정말 쉽게 입니다 : 당신이
function foo() {
var niftySpiffyThing;
// ...
niftySpiffything = 42;
// ...
}
전화 foo
한 번 빵이 글로벌라고 (때문에 소문자 thing
에서 t
의) niftySpiffything
.
이 습관적으로 스크립트의 상단에 "use strict"
을 넣어 또는 함수 내 최초의 표현으로, 엄격 모드를 사용하는 많은 이유 중 하나입니다 : 다음
"use strict"; // Applies to all code in this script
(function(){
a = 1;
alert(a);
})();
또는
(function(){
"use strict"; // Applies only to code within this function
a = 1;
alert(a);
})();
전역 대신 오류가 발생합니다.
a = 1
은 a가 전역 varialbe임을 의미하며 개인용이 아닙니다. 쓰기
var a = 1;
비공개로 설정하십시오.
var
을 생략하면 쉽게 전역 변수를 만들 수 있습니다. 매우 위험합니다.
일부 자료는 여기에 있습니다 : Difference between variable declaration syntaxes in Javascript (including global variables)?
고마워! 'var a = 1'은 그것을 고쳤습니다 .. 지금부터는 "strict strict"를 사용하고 있습니다. – FloatingRock
와우, 고마워요! 그것이 IIFE에서도 일어난다는 것을 깨닫지 못했습니다. – FloatingRock
@FloatingRock : 모든 기능에 해당됩니다. :-) –