可以在JavaScript变量是let或var之后将其设置为const吗?

可以在JavaScript变量是let或var之后将其设置为const吗?,javascript,Javascript,我想做一些类似于循环依赖的事情。为了做到这一点,我必须采取以下措施: // x.js let y exports.setY = function(_y) { y = _y } // y.js const x = require('./x') x.setY(exports) 这种循环依赖性问题在数据库模型中经常发生,这个引用那个,那个引用这个。忽略您可能对循环依赖的这个特定用例是否是一个好主意的任何想法,我更想知道是否有一种方法可以在声明变量后在JavaScript中将其转换为常量

我想做一些类似于循环依赖的事情。为了做到这一点,我必须采取以下措施:

// x.js

let y

exports.setY = function(_y) {
  y = _y
}

// y.js

const x = require('./x')

x.setY(exports)
这种循环依赖性问题在数据库模型中经常发生,这个引用那个,那个引用这个。忽略您可能对循环依赖的这个特定用例是否是一个好主意的任何想法,我更想知道是否有一种方法可以在声明变量后在JavaScript中将其转换为常量。与在
中一样,设置y
后,将其设置为常量


这样做可能吗?我想这样做是为了获得性能优势,因为这是关键,在这种情况下,我不关心编译时检查的优势。有没有办法编译这两个变量,使其达到最大效率?

您可以将您的值放入对象并冻结它:

从站点:

方法冻结一个对象。冻结的物体不能移动 不再需要改变;冻结对象可防止新属性丢失 添加到其中后,现有属性将不会被删除,从而防止 更改的可枚举性、可配置性或可写性 现有属性,并阻止现有属性的值 避免被改变


不,一个变量只能声明一次。我不认为javascript不允许这样的更改,但你可以做的是,你可以将它的值分配给一个新的
const
变量。使用
new Function
动态编译没有什么神奇的方法可以做到?也许
eval
有点棘手?当然,在特定的范围内,比如模块的范围内。冻结禁止对象中的更改<代码>常量禁止重新分配<代码>测试=5在您的代码中仍然是可能的。freeze提供了吗?这里讨论了为什么要使用它:
  let test = { name: "" };
    function setTestName(name) {
        test.name = name;
        Object.freeze(test);
    }