给定的functionname()不是函数

时间:2018-08-03 06:29:11

标签: javascript leaflet

我有以下代码行。我感到困惑,为什么我收到“ Uncaught TypeError:checkDistance不是一个函数”错误。

当我仅使用功能checkDistance(a,b)时,它工作正常。但是用下面的代码我得到了那个错误。

有人可以告诉我我的错误吗?

var gjLayer = L.geoJson(testCities, {
    onEachFeature: function(feature, layer) {
        var features = feature.geometry;
        var dist = checkDistance(features.coordinates[1], features.coordinates[0]);

        content = '<div class="container"><div class="row">'+dist+'<span>Name:</span>'+feature.properties.name+'</div></div>';
        layer.bindPopup(content);
    }
});


var checkDistance = function(lat1, lon1) {
   ...
   ...
   return
}

6 个答案:

答案 0 :(得分:2)

function checkDistance(lat1, lon1) {
    ...
    ...
    return
}

这将解决您的错误。由于起重,它的行为。 声明前的using函数。

答案 1 :(得分:2)

如果必须将checkDistance定义为函数表达式,请在gjLayer之前定义它,或者可以使用如下函数声明:

function checkDistance() {
  ...
}

阅读Hoisting

答案 2 :(得分:1)

请查看起重基础知识。现在,在下面的代码中将不会出现“ Uncaught TypeError:checkDistance is a function”。始终在使用前定义函数表达式。

function checkDistance(lat1, lon1) {
   
  
   return ;
}

var gjLayer = L.geoJson(testCities, {
    onEachFeature: function(feature, layer) {
        var features = feature.geometry;
        var dist = checkDistance(features.coordinates[1], features.coordinates[0]);

        content = '<div class="container"><div class="row">'+dist+'<span>Name:</span>'+feature.properties.name+'</div></div>';
        layer.bindPopup(content);
    }
});

答案 3 :(得分:1)

在顶部声明变量! 吊装(对于许多开发人员而言)是JavaScript的未知或被忽略的行为。

如果开发人员不理解吊装,程序可能包含错误(错误)。

为避免错误,请始终在每个作用域的开头声明所有变量。

因为这是JavaScript解释代码的方式,所以它总是一个好规则。

答案 4 :(得分:0)

checkDistance = function(lat1,lon1){  ...  ...  返回 }

答案 5 :(得分:0)

var checkDistance = function(lat1, lon1)function checkDistance(lat1, lon1) 您的问题将得到解决。您正在吊装。