javascript 函数中的 const 变量是每次调用时都初始化还是只初始化一次?

is const variable in javascript function initialized every time when it called or just once?

我想编写这样的代码。

function cokeDispencer(id) {
  const dict = {1:"sprite", 2:"pepcy", ...} // Some JSON. It might be bigger. 
  return dict[id];
}

当然,dict[id] 做同样的事情要简单得多,但我想把 dict 对象放在函数内部,这样其他函数就无法访问这个 dict 对象。 我想知道的是对象字典在每次调用时都会被初始化。据我所知,用 C/C++ 编写的函数每次调用时都会初始化它的局部变量,静态变量除外。如果那样的话,有没有办法像静态变量 C/C++?

一样初始化 const 变量一次

是的,每次该函数运行时您都在创建一个新的 dict 对象。

您可以改用 IIFE - 一个立即运行并“关闭”对象的函数,并且可以 return 一个访问所需 属性.[=16 的函数=]

const cokeDispencer = (() => {
  const dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. 
  return id => dict[id];
})();
console.log(cokeDispencer(1));

这几乎和

一样

const dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. 
const cokeDispencer = id => dict[id];

console.log(cokeDispencer(1));

除了 IIFE 确保只有 cokeDispener 函数可以访问该对象。

如果您只想在第一次调用函数时创建对象,而不是之前,您可以使用非常相似的技术在需要时分配给仅作用于函数的变量。

const cokeDispencer = (() => {
  let dict;
  return (id) => {
    if (!dict) {
      dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. 
    }
    return dict[id];
  };
})();
console.log(cokeDispencer(1));