【发布时间】:2017-11-02 05:23:46
【问题描述】:
嘿,伙计们,我只是想了解在 javascript 中使用和不使用 var 的变量范围,到目前为止,我理解如果在 javascript 中声明一个变量时不使用 var ,它将在范围内上升,直到找到对该变量,如果它达到全局范围,那么它将在那里创建变量。
我的问题是,在这段代码中,它的输出是 0 0 1,但我不明白我的逻辑哪里出错了。
在我的脑海中 first found 被声明为 0 并且由于它没有用 var 声明它现在将是一个全局变量,因为随着它的作用域上升,它不会被找到。目前找到的是 0。
然后它将在第一个 if 语句之后打印。所以我们在 0。
然后,当它说 found = 1 时,在获取当前位置时,它会不会上升范围,直到它在 getMyLocation 函数中看到该回调函数之外的找到并将找到的重新分配给 1?
然后我假设它现在会打印 1,然后一旦它在该代码块之外,然后再次打印 1 以获得 0 1 1。我明白我说的是错误的,我只是不知道在哪里。
<script>
function getMyLocation() {
found = 0;
if (navigator.geolocation) {
console.log(found);
navigator.geolocation.getCurrentPosition(function(position) {
found = 1;
console.log(found);
});
}
console.log(found);
}
</script>
【问题讨论】:
-
在没有 var(或 let 或 const)的情况下初始化变量是 not 声明它。 ;-)
-
传递给
navigator.geolocation.getCurrentPosition()的函数异步返回结果 -
@guest271314 但是为什么在该函数中找到的console.log 不是 1 的回调函数在该函数中设置为 1?
-
正如 guest271314 所说,第一个 console.log 打印 0,然后对 getCurrentPosition 的调用异步停止,脚本继续,最后一次调用 console.log 发生 found 仍然为 0。然后一段时间后,回调被调用,found 设置为 1 并执行对 console.log 的中间调用。所以日志显示
0 0 1。