Javascript には関数スコープがあります。つまり、関数内で定義された変数は、その関数内でのみ表示されます。関数の外部からこの変数にアクセスするには、関数の外部で宣言するか、ウィンドウまたは他のグローバル オブジェクトに直接アタッチするか、関数から値として返す必要があります。
外部で宣言する:
var App;
jQuery(function($) {
'use strict';
App = {
init: function() {
App.startTool();
}
[...]
ウィンドウまたはその他のグローバル名前空間へのアタッチ:
jQuery(function($) {
'use strict';
window.App = { //or namespace.App where namespace can be another global variable.
init: function() {
App.startTool();
}
[...]
あなたがそれをラップしている方法では、値を返すことはできませんが、それが別の関数であれば、これを行うことができます:
var App= (function() {
'use strict';
var App = {
init: function() {
App.startTool();
}
return App;
}())
関数スコープについてもう少し: 関数内で宣言された変数は、その関数の外から見ることはできません。関数外で宣言された変数は、関数内から見ることができます。したがって、オブジェクトをグローバルにしたい場合は、関数の外側で宣言するか、関数の外側で既に宣言されているもののプロパティとして設定する必要があります。ブラウザでは、window オブジェクトはデフォルトでグローバルです。nodejs や rhino などの他の環境には、独自のグローバル オブジェクトがあります。
JS スコープがどのように機能するかを理解することは重要です。なぜなら、JS スコープは言語の多くのより強力な機能、特にクロージャーとモジュール パターンの背後にある基盤だからです。
名前空間の利点について言及している人もいます。これは、このコンテキストの良い点です。ライブラリまたはアプリケーションに対して 1 つのグローバル変数を使用すると、使用している可能性のある他のライブラリまたはスクリプトとの競合を回避できます。次に、他の変数をそのグローバル名前空間変数にアタッチし、それらをそのオブジェクトのプロパティとして参照できます。App.init
したがって、直接呼び出す代わりにmyProgram.App.init()
、たとえば呼び出します。