2017-01-18 10 views
1

필자가 알고있는 한, 함수 내에서 선언 된 변수는 지역 변수 (var 키워드 사용 여부)입니다. 그렇다면이 출력은 왜 5입니까? xfunc1으로 만 알려져 있기 때문에 func2을 호출 할 때 ReferenceError을 받아야하지 않습니까? 당신이함수 내부에서 전역 변수 만들기 - 이것이 왜 작동합니까?

function func1(){ 
    var x = 5; 
} 

로 정의하지 않았기 때문에

<script> 
    function func1(){ 
     x = 5; 
    } 

    function func2(){ 
     document.write(x); 
    } 

    func1(); 
    func2(); 
</script> 
+1

_ "함수 내에서 선언 된 변수"_, 당신이 didnt는 : 엄격 모드에서

Assigning a value to an undeclared variable implicitly creates it as a global variable (it becomes a property of the global object) when the assignment is executed.

, 당신의 코드에서 오류가 발생합니다 'let' 또는'var'을 사용하지 않았기 때문에. –

+0

변수는'val'로 선언 할 때 지역 변수입니다. 그렇지 않으면 그들은 글로벌입니다. –

+0

[JavaScript Scope] (https://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/)을 읽어보십시오. –

답변

2

Afaik, variables declared inside a function are local variables (using var keyword or not).

변수는 로컬,하지만 당신은 어떤 변수를 선언하지 않습니다. 당신이 가진 것은 "암시 적 글로벌"이라고 알려진 것이며, "엉성한 모드"에서만 작동합니다. MDN에서

:

"use strict"; 
 

 
function func1() { 
 
    x = 5; 
 
} 
 

 
function func2() { 
 
    document.write(x); 
 
} 
 

 
func1(); 
 
func2();

+0

그래서 실제로 함수 내부에 전역을 만드는 방법이 있습니다. 감사! – onTheFence

+1

@onTheFence 예, 가능하지만 아주 나쁜 생각입니다. 그래서 엄격 모드에서 오류가 발생합니다. – JLRishe

2

그것은이 JS가 존재하지 않는 전역 변수 x를 사용하는 것을 의미합니다,하지만 당신은 FUNC1을 실행할 때.

"var"를 추가하면 로컬 범위 인 func1 내의 변수가 정의됩니다. 변수가 선언 func1로 범위되지 같이

1
function func1(){ 
    x = 5; 
} 

var x; // In global scope 
function func1(){ 
    x = 5; 
} 

동일하다.

아직 정의되지 않은 변수에 액세스하려고하므로 콘솔에 오류가 발생합니다. 함수 내에서를 선언

function func1(){ 
    var x = 5; 
}