同一个无名变量是否计算了两次

Is the same anonimous variable calculated twice

提问人:Nikolai Tkachenko 提问时间:10/24/2023 最后编辑:Rory McCrossanNikolai Tkachenko 更新时间:10/24/2023 访问量:33

问:

我在 Javascript 中有一个这样的假想代码

let z = 99999;
if (str.lastIndexOf('_') !== -1)
  z = str.lastIndexOf('_');     
}

会是这段代码:被计算两次吗?
或者在这个原因中:
str.lastIndexOf('_')z = str.lastIndexOf('_') !== -1 ? str.lastIndexOf('_') !== -1 : 99999;

如果这将计算两次,这是否意味着最好的方法是放入一个单独的变量中并在条件下使用它?str.lastIndexOf('_')

我想知道故意忽略执行模式 可以通过词汇目的来证明。

JavaScript 变量 冗余

评论

0赞 mplungjan 10/24/2023
是的,它会的。缓存值
0赞 Rory McCrossan 10/24/2023
是的,它将计算两次。所以是的,最好将该操作的结果放入变量中并重用它

答:

2赞 Konrad 10/24/2023 #1

我们可以通过覆盖来测试这一点lastIndexOf

const orig = String.prototype.lastIndexOf
String.prototype.lastIndexOf = function(...args) {
  console.log('running lastIndexOf')
  orig.call(this, ...args);
}

const str = '31231231231312_1312312'
let z = 99999;
if (str.lastIndexOf('_') !== -1) {
  z = str.lastIndexOf('_');     
}

如您所见,它打印了 2 次