2

内に関数を定義してい$('document').readyます。

$('document').ready(function() {
  function visit(url) {
    $.ajax({
      url: url,
      container: '#maincontainer',
      success: function(data) {
        init();
      }
    });
  }

  function init() {
    ...
  }
)};

しかしinit()、Chromeコンソールで呼び出すと、次のようになりますReferenceError: init is not defined

更新:ご協力いただきありがとうございます。私がやったwindow.init = init;、それは完璧に動作します。

4

5 に答える 5

5

関数initは、渡した関数のスコープに含まれていますjQuery.ready。これは良いことです。不要なグローバルを作成していないことを意味します。

関数をグローバル スコープにエクスポートする必要がある場合は、次のように のプロパティに明示的に割り当てることで実行できますwindow

window.init = init;

windowはブラウザのグローバル オブジェクトであるため、window.接頭辞なしで Chrome のコンソールから呼び出すことができます。ただし、絶対に必要な場合にのみ実行してください。グローバルスコープはすでに十分に混雑しています。

于 2012-02-13T22:56:46.123 に答える
1

のような関数宣言は、function init() {}定義されているスコープに制限されます。 init を他の場所で使用する場合は、次のようにします。

var init;
$('document').ready(function() {
    init = function() {};
});
于 2012-02-13T22:54:10.420 に答える
0

次のようなことを試してください:

$('document').ready(function() {

  var objScope = this;

  function visit(url) {
    $.pjax({
      url: url,
      container: '#maincontainer',
      success: function(data) {
        objScope.init();
      }
    });
  }

  function init() {
    ...
  }
)};
于 2012-02-13T22:56:09.420 に答える
0

関数定義を準備完了関数の外に置きたいと思います。関数がドキュメントを参照していても、ドキュメントが関数を定義する準備ができている必要はありません。関数内の参照は、関数が実際に実行されるまで実行されないことに注意してください。関数定義は、テキスト定数を定義するようなものです。代わりに次を使用します。

function visit(url) {
    $.pjax({
        url: url,
        container: '#maincontainer',
        success: function(data) {
        init();
        }
    });
}

function init() {
    ...
}

$(function () {
    init();
});
于 2012-02-13T22:57:39.293 に答える
-1

関数は、定義したスコープでのみ定義されます。

この方法を主張する場合は、init = funciton()代わりに構文を使用してください。これにより、どこからでも参照できるグローバル変数が作成されます (varそこに配置しないため)。

とは言っても、関数の定義はいつでも実行できます.ready()

于 2012-02-13T22:53:24.803 に答える