2011-04-10 2 views
1

그물에서 계산기 코드를 찾고 다음과 같은 코드를 발견했습니다.자바 스크립트에서 함수가 변수 앞에 선언하는 이유

하지만 내 마음에는 질문이 있습니다. 프로그래머가 함수를 만들기 전에 변수를 선언 한 이유는 무엇입니까?

var getValues= ""; 

function updateField(val) { 
    getValues += val; 
    document.calc.putValues.value = getValues; 
} 

친절하게도 제 질문에 답변 해주세요.

감사합니다.

답변

1

알다시피 변수는 함수에서 실제로 선언 될 수 있습니다. 그러나 함수를 사용하기 전에 선언해야합니다. 즉 함수가 호출되기 전에 선언되어야합니다.

나는 무엇을 의미 하는지를 보여주기 위해 테스트 시나리오를 만들었습니다. 나는 (파일 : //$path_to_file/test.html를) 내 Firefox4에서이 텍스트 파일을로드하면

<script type="text/javascript"> 
var a = "hello"; // <- the declaration of the variable before the function 
function b(){ // <- the actual function 
    a += " world"; 
    alert(a); 
} 
b(); // <- and here it is called 
</script> 

: 내가 경고 상자를 얻을 수

나는 다음과 같은 간단한 내용으로 test.html라는 TEXTFILE을 생성 메시지는 Hello world입니다.

<script type="text/javascript"> 
function b(){ // <- the actual function 
    a += " world"; 
    alert(a); 
} 
var a = "hello"; // <- the declaration of the variable under the function 
b(); // <- and here it is called 
</script> 

결과는 동일 :

는 그럼 난 순서 변경 Hello World 을하지만이 같은 통화에서 선언 퍼팅 때 :
<script type="text/javascript"> 
function b(){ // <- the actual function 
    a += " world"; 
    alert(a); 
} 
b(); // <- and here it is called 
var a = "hello"; // <- the declaration of the variable under the call 
</script> 

나는 다른 결과를 얻었다 : undefined world. JavaScript는 a이 무엇인지 모르기 때문에 undefined으로 처리합니다.

는 물론 숫자의 합은 문자열의 합에서 다르게 해석 될 수 있었다, 그래서 나는이 테스트 :

<script type="text/javascript"> 
function b(){ // <- the actual function 
    a += 3; 
    alert(a); 
} 
b(); // <- and here it is called 
var a = "hello"; // <- the declaration of the variable under the call 
</script> 

결과가 있었다 : NaNNot a Number을 의미한다.

JS의 게으름과 관용에 관한 이야기입니다. 물론 변수와 함수의 범위와 관련하여 질문을 해석 할 수도 있습니다. 하지만 거기에는 이미 2 가지 대답이 있습니다. 물론, 그들이 충분하지 않다면 나는 또한 여기서 상세한 설명을 편집 할 수있다.

+0

대단히 감사합니다. 도와 주셔서 정말 고맙습니다. 다시 한 번 감사드립니다. – Muzammil

2

그가하는 일은 변수를 함수의 범위 밖으로 옮기는 것입니다.

동일한 변수를 동일한 범위의 다른 메서드에서 액세스 할 수있게합니다.

이 질문은 변수 범위에 대한 자세한 내용을 참조하십시오 : What is the scope of variables in JavaScript?

+0

대단히 감사합니다. 지금 나는 당신이 준 링크를 읽고 있는데 그것은 나에게 매우 도움이된다. – Muzammil

3

는 함수 호출을 통해 그 값을 계속 전역 변수입니다 그런 식으로. 함수 안에 넣으면 함수가 호출 될 때 항상 0이됩니다.

+1

getValues는 함수가 호출 될 때 항상 "0"이되지 않습니다. 전역 변수이며 함수가 호출되기 전에 값 ''(빈 문자열)이 지정됩니다.함수가 호출되면 함수가 할당 한 값이됩니다. 함수가 호출 된 마지막 시간에 할당 된 경우에만 0 값을 갖습니다. – RobG

+0

나는 함수가 * 내부에 있다면 * 항상 비어있을 것이고, 다른 호출을 통해 그 값을 유지하지 않을 것이고 다른 함수에서 사용될 수 없다는 것을 설명하려고 노력했다. – AlfonsoML

+0

@RobG'code'var getValues ​​= ""; function updateField (val) { getValues ​​+ = val; document.calc.putValues.value = getValues; } 글쎄, 나는'code'var getValues와 같은 변수를 할당 할 수도있다. 그게 왜 내가 빈 할당해야합니다 그게 아니야 – Muzammil

관련 문제