私はC++とJavaのバックグラウンドを持っています。私はJavaScriptで関数呼び出しを理解することにいくつかの問題を抱えています。JavaScriptスコープと関数呼び出し
以下は私のコード例です。私は変数lonとlat#4を宣言しました。 5行目と6行目に値を割り当てます。
私の質問ですが、#1のwriteToTes()を呼び出しました。しかし、#2や#3にwriteToTes()を置くと、lonとlatは空になりません。何故ですか? (navigator.geolocation){}、latとlonがすでに割り当てられている必要があります。なぜ私がwriteToTes()の呼び出しを行ったのですか?lonとlatはまだ空です。
var lon = '',
lat = ''; // #4
$(document).ready(function() {
setLonLat();
});
function setLonLat() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
lat = (position.coords.latitude); //#5
lon = (position.coords.longitude); //#6
writeToTes(); //#place it Here #1
});
//#place it Here #2
}
//#place it Here #3
}
function writeToTes() {
$("#tes").html(lon + " " + lat);
}
これは非同期性のためです。そのため、コールバック関数を渡すのは、結果が受け取られたときに呼び出されます。変数をコールバックハンドラの外に置くと、何かが割り当てられる前の状態であることがわかります – baao