【问题标题】:Accessibility and code organization problems in javascript with jquery使用 jquery 的 javascript 中的可访问性和代码组织问题
【发布时间】:2009-08-05 06:32:07
【问题描述】:

我的程序中的代码顺序有问题。现在我在document.ready(function() { } ); 中有一些东西,还有一些东西在它之外。每当我移动任何东西(以组织或改进我的代码)时,我最终都会破坏某些东西,我猜测是因为声明的顺序或访问级别(即,document.ready(function {}); 之外的东西无法访问其中的东西。

任何人都知道应该在哪里放置 javascript 明智的东西吗?

所有东西都应该在document.ready(function() {}); 内吗?
有什么理由在document.ready(function() {}); 之外有任何东西吗?
document.ready(function() {}); 内的代码是否无法被外部代码访问?

【问题讨论】:

    标签: javascript jquery accessibility coding-style organization


    【解决方案1】:

    1 .一切都应该在 document.ready(function() {});?

    不,我认为document.ready函数必须只是初始化事物,分配事件处理程序等等。

    2 。有没有理由拥有 以外的任何东西 document.ready(function() {});?

    代码重用和更好的代码组织。

    3 .里面的代码是 document.ready(function() {}); 外部代码无法访问?

    是的,在 document.ready 上创建的变量和对象无法从外部范围访问。

    【讨论】:

      【解决方案2】:

      一切都应该在 document.ready(function() {}); 内吗?

      是和不是。在大型 JavaScript 应用程序中,我将我的主控制器从这个事件处理程序初始化到全局范围内。但是,有些代码不需要等待 DOM 准备好,具体来说:不依赖 DOM 的代码。我认为这很简单。例如,我在此事件处理程序之外声明配置对象类、函数等。

      是否有任何理由在 document.ready(function() {}); 之外拥有任何东西?

      当然,原因在上面已经提到。主要是,不需要 DOM 交互的代码不应该等待 DOM 加载,特别是如果它可以与 DOM 加载异步执行(例如:函数定义、配置对象等)。

      此外,不将所有代码包含在一个事件处理程序中可以使事情更有条理,允许您模块化代码,使用适当的设计模式等。

      是document.ready(function() {})中的代码;外部代码无法访问?

      再次,是的,不是的。如果您使用var 将其声明为本地,则可以,外部范围无法访问它,因为它是事件处理程序的本地;否则,它在全局范围内并且可以被外部范围访问。这是一个示例(在此处托管:http://jsbin.com/uriqe

      JavaScript

      var foo = function() {
        alert(global);
        return false;
      }
      
      $(document).ready(function() {
        global = "you can see me!?";
        alert("global is initiated");
      });
      

      HTML

      <body>
        <p><a href="#" onclick="foo()">click me</a></p>
      </body>
      

      有意使用onclick而不是$(document).ready()中的不显眼的方法事件附件来避免关于foo通过闭包属性访问global的任何问题/争论。

      编辑:我以为我在上一句中已经说清楚了,但是故意使用 onclick 以避免混淆全局范围和闭包属性,但是 我'我不提倡使用onlick当然这是一种不好的做法,你不应该使用它。

      【讨论】:

      • 是的,这就是为什么我说,“onclick ... 是故意使用的。”请阅读整篇文章。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多