JavaScript에서 전역 변수를 어떻게 선언 할 수 있습니까?
답변
프로덕션 코드에서 전역 변수를 생성해야하는 경우 (피해야 함) 항상 명시 적으로 선언하십시오 .
window.globalVar = "This is global!";
var
동일한 이름의 로컬 변수가 없다고 가정 하여 전역 변수를 정의하는 것이 가능하지만 암시 적 전역을 생성 하는데, 이는 나쁜 일이며 엄격 모드 에서 오류를 생성 합니다 .
답변
이것이이 변수를 사용하는 유일한 응용 프로그램이라면 Felix의 접근 방식이 우수합니다. 그러나 jQuery 플러그인을 작성하는 경우 jQuery 객체에 필요한 “namespacing”(따옴표에 대한 자세한 내용 …) 변수 및 함수를 고려하십시오. 예를 들어, 현재 miniMenu라는 jQuery 팝업 메뉴에서 작업하고 있습니다. 따라서 miniMenu
jQuery에서 “네임 스페이스”를 정의하고 모든 것을 그곳에 배치했습니다.
자바 스크립트 네임 스페이스에 대해 이야기 할 때 따옴표를 사용하는 이유는 일반적인 의미에서 네임 스페이스가 아니기 때문입니다. 대신 자바 스크립트 객체를 사용하고 모든 함수와 변수를이 객체의 속성으로 배치합니다.
또한 편의상 일반적으로 플러그인 네임 스페이스의 하위 공간을 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 입니다. 그것이 도움이되기를 바랍니다!