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));
我想编写这样的代码。
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));