strict
モードでthis
の値を使用して通常の関数呼び出しはundefined
です。それはまさにあなたの状況です。あなたの機能:
(function (global) {
"use strict";
var self = this;
...
})(window);
のでthis
は未定義になり、通常の関数呼び出しのです。 strict
モードを使用しない場合は、通常の関数呼び出しでthis
がグローバルオブジェクトに設定されます。そうでない場合、this
は、関数が別の方法(new
、.apply()
または.call()
またはobj.method()
など)で呼び出されたときにのみ、一意の値に設定されます。
self
回避策this
が既に所望の物体を指し、あなたはコールバックで後で使用するためにその参照を保存する場所は、使用している状況にあります。あなたのコードではそうではないので、あなたのコードにthis
を使用することが期待されていることは明らかではありませんが、あなたがしようとしているオブジェクトの詳細な説明なしにあなたの問題を解決するために推奨するものを使用するのは明確ではありません参照。
グローバルオブジェクトだけを参照する場合は、コード内でglobal.test
を参照するだけで済みます。
(function (global) {
"use strict";
function onDeviceReady() {
global.test = "123";
loadMapsApi();
}
function loadMapsApi() {
console.log(global.test);
}
})(window);
あなたには、いくつかの他のオブジェクトを指すようにthis
を期待している場合、あなたは、あなたがそれを指すように期待しているかを説明する必要がありますし、我々はあなたにその特定を参照する方法のアイデアを提供することができますオブジェクト。
「"use strict";
」を削除しては機能しません。 strict
モードを使用しているときにコードが正しく動作しないという事実は、あなたのコードが保護するように設計された悪い練習を使用していることを意味します。代わりに、strict
モードを引き続き使用してください。代わりに、悪い習慣の使用をやめて、strict
モードで正しく動作するようにコードを修正してください。今後の参考のために
、あなたはJavascriptが関数呼び出しの内部にthis
を設定するかを決める方法を学習したい場合は、この答えは読むことができます:When you pass 'this' as an argumentを。その答えは、this
の値が決定される5つの異なる方法をリストしています。
「これは」と何が期待されますか? –
私はそれがparamsを使用しないそれらの関数の間で物事を共有する方法であると思いますか? :D – user2391356
代わりに 'closure'を使うか、' use strict'を削除してください。 strictを削除すると 'this 'を介して' window'にアクセスできます。 –