function insertMessage(message){
메시지출력
}

 

위와 같이 공용으로 쓸 수 있도록 스크립트 함수를 만들었다고 한다면

 

다른 스크립트에서 

위 함수를 실행하려면 별도 방법이 필요한가요?

 

function other(){

insertMessage('메시지');

}

 

이렇게 하면 insertMessage 가 정의되지 않았다고 에러가 뜨더라구요.

 

 

 

 

  • profile
    var printMessage = function insertMessage(message){
    메시지출력
    }

    이렇게 전역변수로 함수를 담아서 사용하니 되는 것 같습니다.

    function other(){
    printMessage('메시지');
    }
  • profile

    함수를 어디서 선언했는지에 따라 다릅니다.

     

    $(document).ready(function() {

        function insertMessage(message) {

            alert(message);

        }

    });

     

    이런 식으로 다른 함수 안에 감싸진 상태라면, 바깥쪽에 있는 함수에 묶여있으므로

    안에서 선언한 함수바깥 함수 바깥이나 다른 파일에서 사용할 수 없게 됩니다.

     

    어디에도 감싸져 있지 않은 상태에서 선언하거나, 명시적으로 전역변수로 선언하면

    밖에서도 (다른 파일에서도) 사용할 수 있습니다.

     

    var로 선언했다고 전역변수가 되는 것은 아닙니다.

    제대로 전역변수를 만들려면 window.함수명 = function ... 으로 선언해야 합니다.

     

    전역변수로 선언하더라도 위와 같이 jQuery 콜백함수에 감싸져 있다면

    해당 부분이 실행되는 시점이 다른 스크립트보다 늦어져서,

    다른 스크립트에서는 아직 선언되지 않은 것으로 보일 수 있습니다.

     

    function으로 선언한 것과 var로 선언한 것, window.함수명으로 선언한 것이

    실행되는 시점이 또 각각 다릅니다. 완전 댕댕이판이예요...
     

    var로 선언했더니 된다고 하신 것을 보면, 전역변수냐 아니냐만의 문제는 아닌 것 같고

    실행 시점의 문제도 얽혀 있는 것 같습니다.

  • profile profile
    아 그렇군요.

    $(document).ready(function() {

    function insertMessage(message) {

    alert(message);

    }

    });

    이렇게 감싸진 곳이라 발생한 문제네요. 밀씀하신 것 참조해서 바꾸보겠습니다.