1

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

任何人都对javascript明智的位置有任何见解吗?

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

4

2 回答 2

3

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

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

2. 有什么理由在 document.ready(function() {}); 之外有任何东西吗?

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

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

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

于 2009-08-05T06:41:32.663 回答
0

一切都应该在 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()问题/争论。fooglobal

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

于 2009-08-05T06:56:06.863 回答