回答:
プロダクションコードでグローバル変数を生成する必要がある場合(回避する必要があります)、常に明示的に宣言します。
window.globalVar = "This is global!";
省略してvar
(同じ名前のローカル変数がないと仮定して)グローバル変数を定義することは可能ですが、これを行うと暗黙のグローバルが生成されます。
これがこの変数を使用する唯一のアプリケーションである場合、Felixのアプローチは優れています。ただし、jQueryプラグインを作成している場合は、jnameオブジェクトで必要な「namespacing」(引用の詳細は後で...)変数と関数を検討してください。たとえば、現在miniMenuと呼んでいるjQueryポップアップメニューに取り組んでいます。したがって、miniMenu
jQueryで「名前空間」を定義し、そこにすべてを配置します。
JavaScriptの名前空間について話すときに引用符を使用するのは、それらが通常の意味での名前空間ではないためです。代わりに、JavaScriptオブジェクトを使用して、すべての関数と変数をこのオブジェクトのプロパティとして配置します。
また、便宜上、通常はプラグインの名前空間を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(...) {...}
いつでもそれを行うことができますが、それでもグローバルな名前空間には入れません。
delete $.miniMenu
。大丈夫ですか?
delete $.miniMenu
。
編集 問題は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();
});
ヒント:このコード全体をこのページのコンソールで実行してください;-)
$current = 0;
関数の最初で定義しないと、後の関数は機能しません。
次に、残りの関数がアクセスできるグローバル変数の基本的な例を示します。ここにあなたのためのライブの例があります: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です。それが役に立てば幸い!
window
ブラウザでのみ使用できます。回答を編集して、すべての環境で機能するようにできますか?JavaScriptでグローバルオブジェクトを取得する方法を