Javascript:在函数之间传递大对象或字符串被认为是一种不好的做法

标签 javascript

在函数之间传递大字符串或对象(比方说来自 ajax 响应)是否被认为是一种不好的做法?以任何方式将响应保存在变量中并继续重用该变量是否有益?

所以在代码中它会是这样的:

var response;

$.post(url, function(resp){
   response = resp;
})

function doSomething() {
  // do something with the response here
}

对比

$.post(url, function(resp){
   doSomething(resp);
})

function doSomething(resp) {
  // do something with the resp here
}

假设 resp 是一个大对象或字符串,它可以在多个函数之间传递。

最佳答案

javascript 中的对象和字符串是通过引用传递的。 (从技术上讲,通过引用值,这意味着用 = 重新分配函数内部的变量不会影响函数外部的变量,但这不是这个问题的重点。)

这意味着将它们传递给函数并不昂贵,因为没有复制。传递给函数的只是一个指向原始对象的指针,这是高效的。


您还需要意识到您的第一个方案甚至无法正常工作:

var response;

$.post(url, function(resp){
   response = resp;
})

function doSomething() {
  // do something with the response here
}

因为事情的时间安排,你不知道什么时候调用doSomething()$.post() 如您所见,它是异步的,因此您不知道它何时实际完成。代码中的 resp 值必须在完成函数中使用。您必须在完成函数中使用它或从完成函数中调用某些东西并将 resp 传递给它(就像您的第二个示例)。只有这样,您才能获得该数据可用的正确时间。

关于Javascript:在函数之间传递大对象或字符串被认为是一种不好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942054/

相关文章:

javascript 单选按钮焦点在 Firefox 上不起作用?

javascript - 如何在reactJs中检测包含特定类的子节点?

javascript - WebView 和 JavaScript 之间如何通信?

javascript - 当我尝试通过 POST 将行的 id 值发送到另一个页面时,该页面将始终获取 id 值 1

javascript - 在 JavaScript 中使用 JSON 文件

javascript - 为什么 socket.io 搞乱了我的 ajax header ?

javascript - 如何在 Parse-SDK-JS 中创建具有关系的新 Parse.Object

javascript - JavaScript 中的重复函数不起作用

javascript - 动态属性值而不是函数?

javascript - BrowserSync 阻止在 Firefox (OS X) 中导航