一切都应该在 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
. 当然,这是一种不好的做法,您不应该使用它。