[javascript] JavaScript에서 전역 변수를 선언하는 방법은 무엇입니까?

JavaScript에서 전역 변수를 어떻게 선언 할 수 있습니까?



답변

프로덕션 코드에서 전역 변수를 생성해야하는 경우 (피해야 함) 항상 명시 적으로 선언하십시오 .

window.globalVar = "This is global!";

var동일한 이름의 로컬 변수가 없다고 가정 하여 전역 변수를 정의하는 것이 가능하지만 암시 적 전역을 생성 하는데, 이는 나쁜 일이며 엄격 모드 에서 오류를 생성 합니다 .


답변

이것이이 변수를 사용하는 유일한 응용 프로그램이라면 Felix의 접근 방식이 우수합니다. 그러나 jQuery 플러그인을 작성하는 경우 jQuery 객체에 필요한 “namespacing”(따옴표에 대한 자세한 내용 …) 변수 및 함수를 고려하십시오. 예를 들어, 현재 miniMenu라는 jQuery 팝업 메뉴에서 작업하고 있습니다. 따라서 miniMenujQuery에서 “네임 스페이스”를 정의하고 모든 것을 그곳에 배치했습니다.

자바 스크립트 네임 스페이스에 대해 이야기 할 때 따옴표를 사용하는 이유는 일반적인 의미에서 네임 스페이스가 아니기 때문입니다. 대신 자바 스크립트 객체를 사용하고 모든 함수와 변수를이 객체의 속성으로 배치합니다.

또한 편의상 일반적으로 플러그인 네임 스페이스의 하위 공간을 i 내부에서만 사용해야 사용자에게 숨길 수 있습니다.

이것이 작동하는 방식입니다.

// An object to define utility functions and global variables on:
$.miniMenu = new Object();
// An object to define internal stuff for the plugin:
$.miniMenu.i = new Object();

이제 할 수 $.miniMenu.i.globalVar = 3있거나 $.miniMenu.i.parseSomeStuff = function(...) {...}전 세계적으로 무언가를 저장해야 할 때마다 여전히 전역 네임 스페이스에서 유지합니다.


답변

편집
질문은 JavaScript에 관한 것이고, 대답은 jQuery에 관한 것입니다. 이것은 jQuery가 널리 퍼진 시대의 오래된 답변입니다.

대신 JavaScript의 이해 범위폐쇄 를 권장합니다.

오래되고 나쁜 대답 :
jQuery를 사용하면 선언 위치에 관계 없이이 작업을 수행 할 수 있습니다.

$my_global_var = 'my value';

그리고 어디서나 사용할 수 있습니다. 이미지가 다른 곳에 퍼져있을 때 빠른 이미지 갤러리를 만드는 데 사용합니다.

$gallery = $('img');
$current = 0;

$gallery.each(function(i,v){
    // preload images
    (new Image()).src = v;
});
$('div').eq(0).append('<a style="display:inline-block" class="prev">prev</a> <div id="gallery"></div> <a style="display:inline-block" class="next">next</a>');
$('.next').click(function(){
    $current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1;
    $('#gallery').hide().html($gallery[$current]).fadeIn();
});
$('.prev').click(function(){
    $current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1;
    $('#gallery').hide().html($gallery[$current]).fadeIn();
});

:이 페이지의 콘솔 에서이 전체 코드를 실행하십시오. 😉


답변

다음은 나머지 함수가 액세스 할 수있는 전역 변수의 기본 예입니다. 다음은 실제 예입니다. http://jsfiddle.net/fxCE9/

var myVariable = 'Hello';
alert('value: ' + myVariable);
myFunction1();
alert('value: ' + myVariable);
myFunction2();
alert('value: ' + myVariable);


function myFunction1() {
    myVariable = 'Hello 1';
}

function myFunction2() {
    myVariable = 'Hello 2';
}

jquery ready () 함수 내 에서이 작업을 수행하는 경우 변수가 다른 함수와 함께 ready () 함수 안에 있는지 확인하십시오.


답변

함수 외부에서 변수 선언

function dosomething(){
  var i = 0; // can only be used inside function
}

var i = '';
function dosomething(){
  i = 0; // can be used inside and outside the function
}


답변

가장 좋은 방법은을 사용 closures하는 것입니다. window객체는 속성으로 인해 매우 복잡해 지기 때문 입니다.

HTML

<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" src="init.js"></script>
    <script type="text/javascript">
      MYLIBRARY.init(["firstValue", 2, "thirdValue"]);
    </script>
    <script src="script.js"></script>
  </head>

  <body>
    <h1>Hello !</h1>
  </body>
</html>

init.js ( 이 답변을 기반으로 함 )

var MYLIBRARY = MYLIBRARY || (function(){
    var _args = {}; // private

    return {
        init : function(Args) {
            _args = Args;
            // some other initialising
        },
        helloWorld : function(i) {
            return _args[i];
        }
    };
}());

script.js

// Here you can use the values defined in the html as if it were a global variable
var a = "Hello World " + MYLIBRARY.helloWorld(2);

alert(a);

다음은 plnkr 입니다. 그것이 도움이되기를 바랍니다!


답변