javascript - 每次调用时都会重新创建 JavaScript 函数内部的数组吗?

标签 javascript function v8 spidermonkey javascriptcore

假设我有一个函数 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/

相关文章:

javascript - 原型(prototype)方法可以访问构造函数的上下文(闭包)

javascript - 如何使标题底部的箭头指向上方?

postgresql - 来自 PostgreSQL 存储过程的多个结果集

javascript - Angularjs - ng-cloak/ng-show 元素闪烁

javascript - 使用时间查询行 - postgresql

c++ - 找不到标识符怎么办?有人可以解释吗?

javascript - javascript 中有类似 clicked===true 条件语句的东西吗?

javascript - 监控 Node.js 进程以了解每个进程的最大内存使用量

electron - Electron 生成器因: no 'object' file generated而失败

gradle - 如何在使用 Gradle 构建 fat jar 时编译不同的口味