【问题标题】:Javascript : access return of other functionJavascript:访问其他函数的返回
【发布时间】:2014-06-23 15:02:31
【问题描述】:

是否有可能通过调用一个函数我可以得到内部调用的函数的返回?

function f1(...){
   f2(...);
}

function f2(...){
   return 123;
}

换句话说,通过仅调用f1() 可以从 f2 返回中获得 123 吗? 我希望这是有道理的。

提前致谢。

编辑

我可能没有在这里做出最好的类比,所以这是我的代码:

    getLocation(45.123,12.123);

function getLocation(a,b) {
  document.write(lo);
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(p){ajmo(p,a,b);});
  }
}

function ajmo(position,a,b) {
  lat = position.coords.latitude;
  lng = position.coords.longitude;
  alert('kurac:' + getDistanceFromLatLonInKm(a,b,lat, lng));
}


function getDistanceFromLatLonInKm(lat_origin, lon_origin, lat_pos, lon_pos) {
  var R = 6371;
  var dLat = deg2rad(lat_pos - lat_origin);
  var dLon = deg2rad(lon_pos - lon_origin);
  var a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(deg2rad(lat_origin)) * Math.cos(deg2rad(lat_pos)) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}

我想通过调用get.Location从函数getDistanceFromLatLonInKm的返回中访问d。在这种情况下可以吗?

【问题讨论】:

    标签: javascript jquery function nested return


    【解决方案1】:

    您也可以将上下文this 传递给第二个函数。但是,在这种情况下,您必须按以下方式调用 f2:

    function f1(){
    
       return f2.call(this)
    
    }
    

    --

    function f2(){
       return 123
    }
    

    更新:

    当你有面向对象编程(OOP)时,传递上下文非常有用:

    IE:

     function Person(bornYear){
        this.born=bornYear ; 
        this.age=Age.call(this,2014);   
         return this;
      }
    
    function Age(currentYear){
    
      return currentYear-this.age; 
    
    }
    

    如果您注意到,this.age 不是未定义的,因为上下文 this 已从 Person 函数传递到 Age 函数。

    测试这个例子:

    var abdennour=new Person(1989);
    console.log(abdennour.age) // 25
    

    【讨论】:

    • @Axon : 查看新的更新 == 测试这个例子:
    【解决方案2】:

    为什么不呢?

    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    </head>
    
    <body>
        <script>
            alert(f1());
            function f2() {
                return "Hello, I'm here";
            };
            function f1() {
                return f2();
            };
        </script>
    </body>
    
    </html>
    

    【讨论】:

      【解决方案3】:

      如果要保存返回值,请使用:

      function f1(...){
         var f2return = f2(...);
      }
      
      function f2(...){
         return 123;
      }
      

      如果你想直接返回使用@Travis Js代码。

      我建议将返回值保存到一个变量中以供进一步处理,否则我将直接调用 f2。请记住,任何 return 语句都会退出当前函数。

      【讨论】:

        【解决方案4】:

        你要返回返回值

        function f1(...){
         return f2(...);
        }
        
        function f2(...){
         return 123;
        }
        
        alert(f1());//123
        

        【讨论】:

        • 感谢您的回答。我编辑了问题,请查看。
        猜你喜欢
        • 1970-01-01
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        相关资源
        最近更新 更多