我的程序中的代码顺序遇到了麻烦。现在我在document.ready(function() { } );
中有一些东西,有些东西在它外面。每当我移动任何东西(组织或改进我的代码)时,我最终会破坏某些东西,我猜是因为声明或访问级别的顺序(即document.ready(function {});
之外的东西无法访问其中的某些东西。< / p>
任何人都对javascript明智的位置有任何见解吗?
是否所有内容都在document.ready(function() {});
之内?
是否有任何理由在[{1}}之外有任何内容?是外部代码无法访问document.ready(function() {});
内的代码吗?
答案 0 :(得分:3)
1。如果一切都在内 document.ready(function(){});?
不,我认为document.ready函数必须只是初始化事物,分配事件处理程序等等。
2。有没有理由 以外的任何事情 document.ready(function(){});?
代码重用,以及更好的代码组织。
3。代码是否在内 document.ready(function(){}); 外部代码无法访问?
是的,在document.ready上创建的变量和对象无法从外部范围访问。
答案 1 :(得分:0)
是和否。在大型JavaScript应用程序中,我将主控制器从此事件处理程序初始化为全局范围。但是,有些代码不需要等待DOM准备好,特别是:不依赖于DOM的代码。我认为这很直接。例如,我在此事件处理程序之外声明配置对象类,函数等。
当然,因为上面提到的原因。主要是,不需要DOM交互的代码不应该等待DOM加载,特别是如果它可以异步执行到DOM加载(例如:函数定义,配置对象等)。
此外,不在一个事件处理程序中包含所有代码可以使事情更有条理,允许您模块化代码,使用适当的设计模式等。
再次,是的,不是。如果你用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
通过closure属性访问global
的问题/论点。
编辑:我认为我在上一句中已明确说明了,但 onclick
是故意使用的,以避免全局范围与闭包属性混淆,但我并不主张使用onlick
。当然这是一种不好的做法,你不应该使用它。