【问题标题】:In JavaScript, what is the difference between declaring variables in the scope of a function vs as parameters of the function在 JavaScript 中,在函数范围内声明变量与作为函数参数声明变量有什么区别
【发布时间】:2022-11-30 02:04:45
【问题描述】:

我有这两种解决方案,哪一种更好,为什么?我更喜欢选择在函数内部声明nextprevious变量。但是还有其他选择,我想知道这是否只是代码风格的问题,或者 javascript 引擎是否使这两种解决方案中的一种优于另一种,因为这些变量的内存处理方式。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    let next
    let previous = null
    while(head){
        next = head.next
        head.next = previous
        previous = head
        head = next
    } return previous
};
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head, next, previous = null) {

    while(head){
        next = head.next
        head.next = previous
        previous = head
        head = next
    } return previous
};

【问题讨论】:

  • 你打算在调用函数时传递这些值吗?如果是,那么后者可能更适合你......
  • 不,参数将仅用作函数主体的变量。
  • 那么使它们成为函数参数的目的是什么?你想从中得到什么? (具体来说,你想以故意混淆代码为代价获得什么?)
  • 正如您所说,这会使代码变得混乱。我有同样的感觉。但是有些人这样做并且确实有效。您可以使用相同的第一个参数(不使用第二个参数)调用同一个链表上的两个函数,并且您从两个函数中得到相同的结果。

标签: javascript performance


【解决方案1】:

一种允许您在调用函数时通过传入参数来分配值。另一个没有。

在决定某物是参数还是局部变量时,您不应该考虑性能。

【讨论】:

  • 但是,我可以添加到我的问题中,这些参数并不意味着在调用函数时使用。
  • 我建议你参考这个答案的第二段。
  • 根据此答案的第一段,它们存在实际差异。这意味着它不是编码风格问题或引擎问题。你可能想把它变成一个样式/引擎问题,但根据这个答案的第二段你不应该。
  • “过早的优化是万恶之源”这句话是不言而喻的,这是有原因的。尝试优化它完全是在浪费你的时间(当你询问 SO 而不是对你的实际代码进行真实世界的性能测试时,这是双重的)。
  • @AlexAlvarezGárciga 写评论“抱歉,但我不同意这一点”浪费的时间比切换到更“优化”的代码片段所获得的时间还要多。
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2020-07-31
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多