2016-08-02 2 views
0

나는 mycode.js호출 변수는 2

(function($) { 
    function2() { 
     console.log("main func: " + g_var); 
    } 
}(jQuery)); 

내가 주 HTML의 코드를 사용하여 내 코드를

<script type="text/javascript" src="mycode.js"></script> 
(function ($) { 
    var g_var = 10; 
    console.log("func2: " + g_var); 
    function2(); 
} 

하지만 g_var하지 기능 2에서 볼 수 있습니다.

Uncaught ReferenceError: function2 is not defined
Uncaught ReferenceError: g_var is not defined

어떻게 해결할 수 있습니까?

답변

0

당신은 선언 범위에 대해 읽었습니다. 거의 모든 프로그래밍 언어에서 varibale 및 function 스코프의 이러한 동작을 발견하게됩니다.

답변 :

이 문제를 해결하기 위해, 당신은 그렇지 않으면 내부에서만 사용할 수는 IIFEfunction2 외부를 만들어야합니다. 그런 다음 매개 변수를 사용하여 값을 전달하십시오.


function function2(g_var) { console.log("main func: " + g_var); } (function() { var g_var = 10; function2(g_var); })(); 

는 추가 : 당신이 함수와 같은 범위에서 변수 g_var을 만드는 경우

, 당신은 너무 function2의 내부에 액세스 할 수 있습니다. 하지만 대부분의 경우 그렇게하지 않을 것입니다.

콜백을 사용하여 작업 할 때와 같이 다른 함수 내부에서 생성 된 경우와 같은 경우가 있습니다. 그러나 대부분의 경우 첫 번째 예제와 함께 매개 변수를 사용해야합니다!

(function() { 
    var g_var = 10; 

    function function2() { 
     console.log("main func: " + g_var); 
    } 

    function2(); 
})(); 

하지만 실제로는 대부분의 경우 좋은 생각이 아닙니다.

$(".foo").each(function() { 
    var that = this; 

    $(".bar").click(function() { 
     // access 'that' 
    }); 
}); 
-1

eisbehr를 잘 작성 먼저 다음 요이 모든 것을 외부에서 변수를 정의해야 인생에서 당신의 FUNC를 정의 할 필요가있다 :이 같은 것을 생각하면 그것은 의미가 있습니다. 그런 다음 해당 js 파일의 변수를 모든 함수와 스 니펫을 사용하여 사용할 수 있습니다.

이와 같이 코드를 작성해야합니다.

var g_var; 

function function1(){ 
    g_var=4; 
    console.log("main func: " + g_var); 
} 

function function2(){ 
     g_var=10; 
     console.log("func2: " + g_var); 
} 
0

클로저를 사용하고 있지만 공용 메서드를 반환하지 못했습니다. 이 예제를 참조 워드 프로세서 MDN: JS Closures

var foo = (function($) { 
    function f2(g_var) { // private 
     console.log("main func: " + g_var); 
    } 
    return { 
     function2: function(g_var) { 
      f2(g_var); 
     } 
    }; 
})(jQuery); 

을 확인하고이처럼 호출 할 수

foo.function2(g_var);