Javascript 从函数中检索多个值

Javascript 从函数中检索多个值,javascript,jquery,Javascript,Jquery,我有一个函数,它返回多个值作为复杂数学的结果 var getData = function () { var a=Math.somethingReallyDifficultToCalculate var b=Math.anotherDifficultThingToCalculate return {a: a, b: b} } 然后我想像这样检索数据: var result = getData() console.log(result.a,result.b) 我的程序会同时运行整个函数还是va

我有一个函数,它返回多个值作为复杂数学的结果

var getData = function () {
var a=Math.somethingReallyDifficultToCalculate
var b=Math.anotherDifficultThingToCalculate
return {a: a, b: b}
}
然后我想像这样检索数据:

var result = getData()
console.log(result.a,result.b)
我的程序会同时运行整个函数还是var结果只保留值?结果会被缓存吗? 如果这段代码将运行函数两次,那么有什么好方法可以保留值而不是引用本身呢

我知道我可以使用:

var result = $.extend({},getData())
我知道这只会保留值而不是引用,但这是最好的方法吗


谢谢

它将只运行该函数一次

一旦您这样做:

var result = getData();
。。。
getData()
函数已经完成了它的工作


建议:应该使用分号(
)终止语句。如果不使用它们,Javascript将自动插入它们,这可能会导致各种意外问题。

为什么不尝试使用面向对象的符号

像这样

var getData = {
    a : null,
    b : null,
    c: null,
    setVal : function(){
        this.a = Math.somethingReallyDifficultToCalculate;
        this.b = Math.anotherDifficultThingToCalculate;
        this.c = 10;
    },
    getVal : function(){
        return {a: this.a, b: this.b,c:this.c};
    }
};

getData.setVal()
var result = getData.getVal()
每次调用getVal都会得到保存的值,如果要更改该值,请调用setVal

您还可以在调用setVal时传递参数来设置值,这是最好的方法

最后的代码是这样的

var getData = {
    a : null,
    b : null,
    c: null,
    setVal : function(a,b,c){
        this.a = a;
        this.b = b;
        this.c = c;
    },
    getVal : function(){
        return {a: this.a, b: this.b,c:this.c};
    }
};

var a = Math.somethingReallyDifficultToCalculate;
var b = Math.anotherDifficultThingToCalculate;

getData.setVal(a,b,30)
var result = getData.getVal()

看起来每次都能计算出来。这里没有缓存,不过您可以设置一个。@dandavis似乎您不正确。检查此小提琴“结果”是一个具有两个值的对象。您的函数将仅在调用getData()时运行,而不是在访问“result”中的值时运行。如果您想调用函数两次,可以调用:console.log(getData().a,getData().b)抱歉,我误解了,以为您问的是
数学。有些事情确实很难计算,其结果不会缓存在第一个代码框中的函数中。如果缓存函数return,那么它只会运行一次(普通数据从哪里来并不重要),那么console.log(getData().a,getData().b)呢?@michaelseletnerich当您看到
()
时,表示正在调用函数。在这个例子中,函数将被调用两次。那么谁是对的?你或丹达维斯也有很高的声誉,说的恰恰相反?看来你是对的。检查控制台@MichaelSeltenreich嗯,他错了。他可能误解了这个问题。这和什么有什么关系?这是可笑的过度复杂,因为仅仅试图从一个函数返回两个值。如果我在工作中看到有人写这样的代码,我会让他们重写。返回两个值意味着你返回的是一个对象而不是两个值。请检查问题中的代码。你能解释一下你将如何重写代码吗?请分享小提琴作品的编写方式,它已经非常好了。没有必要重写它。