在学习jQuery和Javascript时,我观察到了一个奇怪的行为。当我调用一个在$(.ready)文档内部定义的变量时,从这些标记外部看它似乎是未定义的,即使我将它定义为一个全局变量,例如:
$(document).ready(function() {
myVar = "test";
});
alert(typeof(myVar));
//Results "undefined"
如果我在document.ready标记内调用相同的变量,它会按预期工作
$(document).ready(function() {
myVar = "test";
alert(typeof(myVar));
//Results "String"
});
即使在使用窗口前缀之后,结果也是相同的。
$(document).ready(function() {
window.myVar = "test";
});
alert(typeof(window.myVar));
//Results "undefined"
我理解变量作用域,但为什么即使是全局变量也不能这样工作。我真的很困惑。
发布于 2016-06-15 12:52:02
在完全构建DOM之前,“就绪”处理程序中的代码将不会运行。一旦遇到处理程序外部的代码,它就会立即运行。因此,您的alert()
在处理程序中的代码运行之前运行,因此结果非常合理:全局变量尚未初始化,因此它的值为undefined
。
通过将alert()
(或者更好地说,是console.log()
)调用放在“就绪”处理程序中,您可以清楚地看到执行的顺序:
$(document).ready(function() {
console.log("In the 'ready' handler");
});
console.log("Outside the 'ready' handler");
当该程序运行时,您将首先看到记录的"Outside“消息。
发布于 2016-06-15 12:52:57
因为alert()
是在文档完全准备好之前执行的。您甚至可以尝试在$(document).ready()
之前声明变量,但它仍将返回未定义的..
发布于 2016-06-15 12:54:56
$(document).ready()在页面完全加载后触发
当脚本标记完全加载时,将执行警报。
所以
$(document).ready
在设置var之前,将执行警报
https://stackoverflow.com/questions/37835989
复制相似问题