假设我有一个函数 dayToString
,定义如下:
function dayToString(n) {
return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][n];
}
很简单。用法可能如下所示:
var d = new Date();
var todayAsString = dayToString(d.getDay());
我的问题是,dayToString
中的数组是在每次调用时重新创建,还是只创建一次?
编辑
澄清:我知道如何通过闭包或外部数组手动避免这种重新分配。为了澄清我的初衷:当前的 JavaScript 引擎(V8、SpiderMonkey、JavaScriptCore、Chakra 等)是否足够聪明,能够认识到数组是静态的并且对待也是如此? JS 规范中是否有某些内容阻止了这种优化?
最佳答案
是的,您正在定义它并在每次调用时返回它。为了避免这种情况,请在函数外部定义:
var arrayOfDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
function dayToString(n) {
return arrayOfDays[n];
}
关于javascript - 每次调用时都会重新创建 JavaScript 函数内部的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117541/