在函数之间传递一个大字符串或对象(比如从ajax响应中)被认为是一种不好的做法吗?以任何方式保存变量中的响应并继续重用该变量是否有益?
所以在代码中它会是这样的:
var response;
$.post(url, function(resp){
response = resp;
})
function doSomething() {
// do something with the response here
}
VS
$.post(url, function(resp){
doSomething(resp);
})
function doSomething(resp) {
// do something with the resp here
}
假设resp
是一个大对象或字符串,它可以在多个函数之间传递。
答案 0 :(得分:10)
javascript中的对象和字符串通过引用传递。 (从技术上讲,通过参考值,这意味着重新分配=
函数内部的变量不会影响函数外部的变量,但除了这个问题的点之外还有。)
这意味着将它们传递给函数并不昂贵,因为没有复制。传递给函数的只是指向原始对象的指针,这是有效的。
您还需要意识到您的第一个方案甚至无法正常运行:
var response;
$.post(url, function(resp){
response = resp;
})
function doSomething() {
// do something with the response here
}
由于事情的时间安排,您不知道何时致电doSomething()
。 $.post()
正如您所示,它是异步的,因此您不知道它何时实际完成。代码中的resp
值必须在完成函数中使用。您必须在完成函数中使用它或从完成函数调用某些内容并将resp
传递给它(就像您的第二个示例)。只有这样,您才能获得有关数据可用时的正确时间。