2013-01-05 2 views
1

많은 게시물을 읽고 javascript 익명 자체 실행 기능에 대해 묻고 답하지만 여전히 요점을 놓치고 있습니다. 이 코드가 myvar 값을 표시하는 이유는 무엇입니까? construct (function() {코드})() 모든 변수를 외부에서 볼 수 없도록 유지해야합니까?javascript 자체 실행 기능 및 범위 지정

(function(){ 
    myvar = 5; 
})(); 

alert(myvar); 

그래서 위의 코드 타협과 차이

function myfunction(){ 
    myvar = 5; 
}; 
myfunction(); 

alert(myvar); 

무엇인가?

+5

로컬 변수는'var' 키워드로 정의해야합니다. – VisioN

답변

2

변수 자바 스크립트에서 함수 수준에서 범위가 있습니다 :이처럼 변경하면

는 무슨 일이 일어 나는지 확인하십시오. 이것이 의미하는 바는 루프 나 if 문 안에 변수를 선언하면 전체 함수에서 변수를 사용할 수 있다는 것입니다.

귀하의 경우에는 누군가가 이미 지적한대로 myVar를 전체 창에서 사용할 수 있습니다.

명시 적 케이지 함수 범위 안에 당신의 변수, 익명 함수를 만든 다음 바로 그것을 실행하고 모든 변수가 내부

(function(){ 
    var myvar = 5; 
})(); 


alert(typeof(myVar)); 

결과 "정의되지 않은"

함수에 범위됩니다해야하는 경우
+0

그래서 construct (function() {})()은 변수 범위 지정과 아무 관련이 없습니다 ...? – lelloman

+0

@ user1846340 함수 foo() {}와 같습니다. foo();가 있습니다. 즉시 호출되는 함수는 다른 함수와 동일한 범위 지정 규칙을 따릅니다. – apsillers

+0

@ user1846340 있습니다. 새로운 범위를 만듭니다. 범위 만 사용하면됩니다. –

3

myvar은 창 범위에 정의되어 있으므로 모든 사용자가 액세스 할 수 있습니다.

당신이해야 범위 myvar 당신이 var로, 개인을 유지하려는 경우 :

당신은 var와 "myVar에"를 선언하는 데 실패
(function(){ 
    var myvar = 5; 
})(); 
+0

그래서 self.executing 구조를 사용해야합니까? – lelloman

+3

@ user1846340 "자체 실행 기능"이라고하는 것은 [Immediately Invoked Function Expression] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/)이라고하거나, IIFE. "자체 실행"은 함수 자체가 반복적으로 호출되는 재귀 유형을 제안합니다. – apsillers

+0

매우 intresting 링크를 주셔서 감사합니다 – lelloman

2

.

(function(){ 
    "use strict"; 
    myvar = 5; 
})(); 
+0

그리고 어떻게됩니까? :) – VisioN

+0

var로 선언 할 수 있다는 것을 알고 있지만 스스로 실행하는 함수의 사용법을 알고 싶습니다. 엄격 모드 경고를 사용하면 myvar이 보이지 않는다 – lelloman

+0

@ user1846340 요점은 ** 'var'로 ** 선언하지 않으면 ** 글로벌 변수 **입니다. – Pointy