JavaScript 变量的范围在此脚本中如何工作?
How does the scope of JavaScript variables work in this script?
我有这段代码,但我无法理解为什么当我首先打印 'globalData' 时它打印所有值都很好,但稍后当我再次打印它时它只打印一个空数组?我是 JavaScript 和 jQuery 的新手。
<script>
var globalData = [];
$( document ).ready(function() {
$.get( "http://....", function( data ) {
globalData.push(data[i]);
.
.
.
});
console.log(globalData); //["fg", "wedsd", "hjkyu"]
});
console.log(globalData); //[]
</script>
使用 $( document ).ready()
时,您只需定义一个匿名函数,该函数会在文档结构成功构建后立即调用。然后你打印 globalData
,此时它是空的。如果您定义的函数被调用,它会初始化 globalData
并且您会看到这些值。
总而言之,因为您定义的回调函数被异步调用并且定义本身不会阻塞并且 returns 立即(即使 DOM 尚未加载),您打印globalData
在回调中填充值之前。
问题甚至与使用 $.get
调用的 Ajax
请求无关,即使您 运行 遇到了类似的情况。但是如果你简单地在 ready
回调中填充数组,你会遇到同样的问题。
我有这段代码,但我无法理解为什么当我首先打印 'globalData' 时它打印所有值都很好,但稍后当我再次打印它时它只打印一个空数组?我是 JavaScript 和 jQuery 的新手。
<script>
var globalData = [];
$( document ).ready(function() {
$.get( "http://....", function( data ) {
globalData.push(data[i]);
.
.
.
});
console.log(globalData); //["fg", "wedsd", "hjkyu"]
});
console.log(globalData); //[]
</script>
使用 $( document ).ready()
时,您只需定义一个匿名函数,该函数会在文档结构成功构建后立即调用。然后你打印 globalData
,此时它是空的。如果您定义的函数被调用,它会初始化 globalData
并且您会看到这些值。
总而言之,因为您定义的回调函数被异步调用并且定义本身不会阻塞并且 returns 立即(即使 DOM 尚未加载),您打印globalData
在回调中填充值之前。
问题甚至与使用 $.get
调用的 Ajax
请求无关,即使您 运行 遇到了类似的情况。但是如果你简单地在 ready
回调中填充数组,你会遇到同样的问题。