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嗯,他错了。他可能误解了这个问题。这和什么有什么关系?这是可笑的过度复杂,因为仅仅试图从一个函数返回两个值。如果我在工作中看到有人写这样的代码,我会让他们重写。返回两个值意味着你返回的是一个对象而不是两个值。请检查问题中的代码。你能解释一下你将如何重写代码吗?请分享小提琴作品的编写方式,它已经非常好了。没有必要重写它。