从Javascript中的嵌套函数返回值

Chr*_*ong 54 javascript nested return function return-value

我有一个功能,设置如下

function mainFunction() {
      function subFunction() {
            var str = "foo";
            return str;
      }
}

var test = mainFunction();
alert(test);
Run Code Online (Sandbox Code Playgroud)

根据我的逻辑,该警报应该返回'foo',而是返回undefined.我究竟做错了什么?

更新:这是我的实际代码(它是使用Google API进行反向地理编码的功能)

function reverseGeocode(latitude,longitude){
    var address = "";
    var country = "";
    var countrycode = "";
    var locality = "";

    var geocoder = new GClientGeocoder();
    var latlng = new GLatLng(latitude, longitude);

     return geocoder.getLocations(latlng, function(addresses) {
     address = addresses.Placemark[0].address;
     country = addresses.Placemark[0].AddressDetails.Country.CountryName;
     countrycode = addresses.Placemark[0].AddressDetails.Country.CountryNameCode;
     locality = addresses.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
     return country;
    });   
   }
Run Code Online (Sandbox Code Playgroud)

z33*_*33m 60

你必须先调用一个函数才能返回任何东西.

function mainFunction() {
      function subFunction() {
            var str = "foo";
            return str;
      }
      return subFunction();
}

var test = mainFunction();
alert(test);
Run Code Online (Sandbox Code Playgroud)

要么:

function mainFunction() {
      function subFunction() {
            var str = "foo";
            return str;
      }
      return subFunction;
}

var test = mainFunction();
alert( test() );
Run Code Online (Sandbox Code Playgroud)

为您的实际代码.返回应该在主函数外部.回调在getLocations方法内部的某处调用,因此它的返回值不会在main函数中被收到.

function reverseGeocode(latitude,longitude){
    var address = "";
    var country = "";
    var countrycode = "";
    var locality = "";

    var geocoder = new GClientGeocoder();
    var latlng = new GLatLng(latitude, longitude);

    geocoder.getLocations(latlng, function(addresses) {
     address = addresses.Placemark[0].address;
     country = addresses.Placemark[0].AddressDetails.Country.CountryName;
     countrycode = addresses.Placemark[0].AddressDetails.Country.CountryNameCode;
     locality = addresses.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
    });   
    return country
   }
Run Code Online (Sandbox Code Playgroud)

  • `getLocations`是异步的.那段代码不起作用. (4认同)
  • 你错过了我最喜欢的选择`return(funtion(){...})();` (2认同)