2012-04-17 7 views
0

var을 사용하든 변수를 선언 할 때 차이점이 무엇인지 알고 싶습니다. 경고가 작동하지 않고 자바 스크립트 var를 사용하는지 여부 변수를 선언 할 때의 차이점은 무엇입니까 왜경고가 작동하지 않는 이유는 무엇입니까?

<body> 
    <h1>New Web Project Page</h1> 
    <script type="text/javascript"> 
     function test(){ 
      a = "hello"; 
      var b="world"; 
     } 
     alert(a); 
      alert(b); 


    </script> 
</body> 

: 나는 다음과 같은 코드를 사용했다.

당신이 기능 test

호출되지 않았기 때문에 b의 경우, 그것은 아직 인스턴스화되지 않은 정확한 범위와 a의 경우에는 존재하지 않는 때문에

alert가 작동하지 않습니다

답변

4

var은 호출되는 범위에 대해 로컬 인 변수를 만듭니다. var이 없으면 전역 변수를 만듭니다.

function fn () { 
    var x = 0; // this variable is local to the function fn 

    y = 10; // this variable is global and can be accessed 
      // from anywhere after you call fn 
} 

글로벌 변수를 사용하지 않으려는 정당한 이유가 없다면 일반적으로 말하면됩니다. 즉, var을 사용하여 모든 변수를 만들고 싶습니다. 변수를 필요한 범위에만두면 코드를 더 쉽게 이해하고 유지할 수 있습니다. 또한 "매직 변수"문제를 완화하는 데 도움이됩니다. 변수가 나타나는 곳은 어디에서 왔는지 명확하지 않습니다. 자바 스크립트에서 존재하지 않는 변수가 즉석에서 생성되기 때문에 코드를 디버그하기가 더 쉽습니다. 그러나 var과 jsLint와 같은 도구를 통해서만 로컬 변수를 사용한다면 변수 이름에 철자 오류가 발생하여 코드가 엉망이되어 버릴 수 있습니다.

1

test() 기능을 호출하지 않습니다. var이 제외되면 변수는 전역 변수가되므로 모든 코드에서 변수를 사용할 수 있습니다.

+2

그리고 'b'를 수행 했더라도 여전히 정의되지는 않습니다 – tobyodavies

2

var없이 변수를 선언하면 전역 변수가되어 아무 것도 액세스 할 수 없게됩니다. 그러나 경고가 작동하지 않는 이유는 test()이라고 결코 부르지 않아서 a 또는 b이 할당되지 않았기 때문입니다. test (경고 이전)으로 전화하면 b은 정의되지 않으며 a은 hello로 읽어야합니다.

A great resource on variables and scoping.

1

당신이 호출되지 않았기 때문에 그것이 당신의 경고가 작동하지 않는 이유에 대해서는 here

대한 답이 'VAR'의 사용에 관한 정확한 동일한 질문 '테스트()'기능 . 그것은 방금 창조되었습니다 ... 그것은 아무것도하지 않을 것입니다. 변수를 채우기 위해 호출해야합니다.

관련 문제