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是浏览器上的全局对象,因此您可以从 Chrome 的控制台调用它而无需window.前缀。但是只有在绝对必要的情况下才这样做,全局范围已经足够拥挤了。

于 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 回答