Bu kodun daha tamamen atlanır görünüyor ve değerlere sahip olmalıdır değişkenleri "tanımsız" olarak ayarlanır (Mac'te Chrome'da gerçekleşmesi sadece görünür) çok garip bir davranıştır. İşte Değişkenler imkansız "tanımsız" olarak belirlenen
Chrome'un geliştirici araçları bir görüntü var. 817 numaralı hattın asla vurulmadığını unutmayın! Ancak 833 vuruldu ve baktığımız şey çarpılan bir istisnadır ve bu karışıklığı bulmak için çağrı yığınına baktım. Ayrıca, "loc", "lon" ve "tc" değişkenlerinin hepsinin tanımlanmamış olduğunu da unutmayın, bunların her biri 822, 823/824 ve 827/831 numaralı satırlarda değerlendirildiği için mümkün olmamalıdır. Hesaplamalarda bir hata varsa, bu değişkenlerin değerleri benim anlayışımdan NaN olmalıdır.function getCircle2(latin, lonin, radius) {
var locs = new Array();
var lat1 = latin * Math.PI/180.0;
var lon1 = lonin * Math.PI/180.0;
var d = radius/3956;
var x;
for (x = 0; x <= 360; x++) {
var tc = (x/90) * Math.PI/2;
var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc));
lat = 180.0 * lat/Math.PI;
var lon;
if (Math.cos(lat1) == 0) {
lon = lonin; // endpoint a pole
}
else {
lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;
}
lon = 180.0 * lon/Math.PI;
var loc = new VELatLong(lat, lon);
locs.push(loc);
}
return locs;
}
herkes bu sihirbazlık ışık tutmayı Can: Burada
gerçek kod nedir? Neden bir kesme noktası göz ardı edilmeli ve değişkenler yalnızca bir Mac üzerinde Chrome'da yanlış değerlere sahip olur?DÜZENLEME:
Ben hata düzeltildi anlaşılıyor. Tüm yaptığım, kendi işlevinde kesme kodunu ayırmak, işlevi bir kez çağırmak, bir istisna attıysa tekrar aradım ve zamanın% 100'ü çalışıyor gibi görünüyordu. Sorunun temel nedeni neydi merak ediyorum.
//new function to isolate the exception
function getCirclePointOnRadius(deg, lat1, lon1, d, attempt) {
attempt = attempt || 1;
var maxAttempts = 2;
try {
var tc = (deg/90) * Math.PI/2;
var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc));
lat = 180.0 * lat/Math.PI;
var lon;
if (Math.cos(lat1) == 0) {
lon = lonin; // endpoint a pole
}
else {
lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;
}
lon = 180.0 * lon/Math.PI;
var loc = new VELatLong(lat, lon);
return loc;
}
catch (e) {
console.log2('Error when gathering circle point "' + e + '", trying again', deg, lat1, lon1);
if (attempt < maxAttempts) {
return getCirclePointOnRadius(deg, lat1, lon1, ++attempt);
}
else {
return 0;
}
}
}
Ve sonra birlikte orijinal (getCircle2
cinsinden) mantığı düzenlenen döngü değiştirin: Eğer http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
Hat 833 olan değişken Kaldırma kurbanı olabilir gibi
for (x = 0; x <= 360; x++) {
locs.push(getCirclePointOnRadius(x, lat1, lon1, d));
}
Yerel dosyalarla veya jsfiddle/codepen gibi bir web sitesinde hata ayıklama yapıyor musunuz? – A1rPun
Evet. Bu bir Net çözümdür. Üretim dosyaları aynı hatayı gösterir, ancak minimize edilmiş javascript dosyalarını kullanır. –
Windows'ta Chrome'da iyi çalışıyor mu? –