2013-11-27 2 views
0
내가 이름을 여기에 값을 받고있다

자바 스크립트 변수 ㅏ

(function() { 
    (function() { 
    var name = 'Fido'; 
    })(); 
})(); 

console.log(name + ' says woof'); //Output: Fido says woof 

변수 이름이 내부 함수의 로컬 없을 겁니다 이유를 이해하는 데 문제가있어

?

+0

변수는 내부 함수에 대해 로컬입니다. 결과를 재현 할 수 없습니다. – nnnnnn

+0

내 콘솔에 "Fido says woof"라고 나와 있습니다. "undefined says woof"와 같은 말을해야합니다. – planetoftheweb

답변

5

변수는 로컬 변수이며 사용자가 보는 값은 함수 내부에서 할당되지 않은 값입니다.

또한 "Fido"라는 창에 이름을 지정했으며 name을 전역 범위로 사용하면 window.name 속성이 나타납니다.

jsfiddle에서 시도하면 "결과가 우위"가 표시됩니다.

데모 : http://jsfiddle.net/Guffa/eDxf3/

+0

어떻게 든 캐싱을하는지 궁금합니다. 나는 분명히 Fido가 결과 대신에 우를 말하고있다. – planetoftheweb

+0

좋아, 브라우저 창을 닫고 페이지를 다시로드하면 이제는 "woof"라고 표시된다. 이 코드의 다른 변형을 많이 시도했기 때문에 캐싱 문제가 있었음에 틀림 없습니다. – planetoftheweb

3

당신이 잘못! 브라우저 콘솔에서 실행하면이 코드는 다음과 같이 출력됩니다. says woof

여러분은 호이 스팅을 더 잘 이해해야한다고 생각합니다. This article이 분명 도움이 될 것입니다. 다음 기사에서 가져온 간단한 설명입니다 :

자바 스크립트에서

는, 이름이 네 가지 기본 방법 중 하나를 사용하여 범위를 입력이 :

  • 언어 정의 : 모든 범위는 기본적으로 이 이름과 인수의 이름이 주어진다.
  • 형식 매개 변수 : 함수는 공식 함수 매개 변수를 가질 수 있습니다.이 매개 변수는 해당 함수의 본문으로 범위가 지정됩니다.
  • 함수 선언 : 이들은 function foo() {} 형식입니다.
  • 변수 선언 : var foo; 형식을 사용합니다.

함수 선언 및 변수 선언은 JavaScript 인터프리터가 포함하는 범위의 맨 위에서 보이지 않게 이동 ("들어감")됩니다. 함수 매개 변수와 언어 정의 이름은 분명 이미 이미 있습니다.

function foo() { 
    bar(); 
    var x = 1; 
} 

실제로 다음과 같이 해석됩니다 :

function foo() { 
    var x; 
    bar(); 
    x = 1; 
} 

선언이 포함 된 행이 이제까지 실행할지 여부는 중요하지 않습니다 밝혀이 같은 그 코드를 의미한다. 다음 두 함수는 같습니다.

+0

제 콘솔에 "Fido says woof"라고 쓰여 있습니다. – planetoftheweb

+0

내가 잘못한 것은 아니지만 어떻게 든 Chrome이 변수를 어딘가에 캐싱하고있는 것처럼 보입니다. 창을 닫고 페이지를 다시로드하면 정상적으로 작동합니다. 아휴.논리가 작동하지 않을 때 나는 그것을 싫어. 그것을 도와 주셔서 감사합니다. – planetoftheweb

+0

@ planetoftheweb 호이스트 및 스코핑을 더 잘 이해하고 다음 번에 그러한 문제를 어디에서 발견 할 것인지 확신 할 수 있는지 확인하십시오. –