(function() {
(function() {
var name = 'Fido';
})();
})();
console.log(name + ' says woof'); //Output: Fido says woof
변수 이름이 내부 함수의 로컬 없을 겁니다 이유를 이해하는 데 문제가있어
?
(function() {
(function() {
var name = 'Fido';
})();
})();
console.log(name + ' says woof'); //Output: Fido says woof
변수 이름이 내부 함수의 로컬 없을 겁니다 이유를 이해하는 데 문제가있어
?
변수는 로컬 변수이며 사용자가 보는 값은 함수 내부에서 할당되지 않은 값입니다.
또한 "Fido"라는 창에 이름을 지정했으며 name
을 전역 범위로 사용하면 window.name
속성이 나타납니다.
jsfiddle에서 시도하면 "결과가 우위"가 표시됩니다.
어떻게 든 캐싱을하는지 궁금합니다. 나는 분명히 Fido가 결과 대신에 우를 말하고있다. – planetoftheweb
좋아, 브라우저 창을 닫고 페이지를 다시로드하면 이제는 "woof"라고 표시된다. 이 코드의 다른 변형을 많이 시도했기 때문에 캐싱 문제가 있었음에 틀림 없습니다. – planetoftheweb
당신이 잘못! 브라우저 콘솔에서 실행하면이 코드는 다음과 같이 출력됩니다. says woof
여러분은 호이 스팅을 더 잘 이해해야한다고 생각합니다. This article이 분명 도움이 될 것입니다. 다음 기사에서 가져온 간단한 설명입니다 :
자바 스크립트에서는, 이름이 네 가지 기본 방법 중 하나를 사용하여 범위를 입력이 :
함수 선언 및 변수 선언은 JavaScript 인터프리터가 포함하는 범위의 맨 위에서 보이지 않게 이동 ("들어감")됩니다. 함수 매개 변수와 언어 정의 이름은 분명 이미 이미 있습니다.
function foo() {
bar();
var x = 1;
}
실제로 다음과 같이 해석됩니다 :
function foo() {
var x;
bar();
x = 1;
}
선언이 포함 된 행이 이제까지 실행할지 여부는 중요하지 않습니다 밝혀이 같은 그 코드를 의미한다. 다음 두 함수는 같습니다.
제 콘솔에 "Fido says woof"라고 쓰여 있습니다. – planetoftheweb
내가 잘못한 것은 아니지만 어떻게 든 Chrome이 변수를 어딘가에 캐싱하고있는 것처럼 보입니다. 창을 닫고 페이지를 다시로드하면 정상적으로 작동합니다. 아휴.논리가 작동하지 않을 때 나는 그것을 싫어. 그것을 도와 주셔서 감사합니다. – planetoftheweb
@ planetoftheweb 호이스트 및 스코핑을 더 잘 이해하고 다음 번에 그러한 문제를 어디에서 발견 할 것인지 확신 할 수 있는지 확인하십시오. –
변수는 내부 함수에 대해 로컬입니다. 결과를 재현 할 수 없습니다. – nnnnnn
내 콘솔에 "Fido says woof"라고 나와 있습니다. "undefined says woof"와 같은 말을해야합니다. – planetoftheweb