【问题标题】:Uncaught TypeError: Assignment to constant variable未捕获的 TypeError:分配给常量变量
【发布时间】:2021-08-05 08:24:39
【问题描述】:

我的变量不是常量,我仍然收到错误:“未捕获的 TypeError:分配给常量变量。”知道为什么吗?

snake.js

export let SNAKE_SPEED = 3;

food.js

import { snakeBody, SNAKE_SPEED } from "./snake.js";

export function update() {

  let head = snakeBody[0];
  if (head.x == food.x && head.y == food.y) {
    food.x = Math.round(Math.random() * 21);
    food.y = Math.round(Math.random() * 21);
    SNAKE_SPEED++;
  }

}

有问题的变量是 SNAKE_SPEED。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    无法重新分配从其他模块导入的标识符。为了达到这样的目的,你可以让另一个模块导出一个改变它的函数,例如:

    export let SNAKE_SPEED = 3;
    export const changeSnakeSpeed = newSpeed => SNAKE_SPEED = newSpeed;
    
    import { snakeBody, SNAKE_SPEED, changeSnakeSpeed } from "./snake.js";
    

    再调用changeSnakeSpeed(SNAKE_SPEED + 1)SNAKE_SPEED就会变了。

    或者做类似的事情

    export const incrementSnakeSpeed = () => SNAKE_SPEED++;
    
    incrementSnakeSpeed();
    

    或者将经常变化的变量放入一个可以变异的对象中(如果您更喜欢不变性,也可以重新分配并再次检索)。

    【讨论】:

    • 哇。现在这完全有道理。所以这很像创建一个 setter,对吧?
    • 当然,尽管拥有 IMO 是一个臭名昭著的问题 - 标识符(从其他模块导入)看似自行更改是非常不直观的。您也可以考虑使用吸气剂。 export const getSnakeSpeed = () => SNAKE_SPEED
    • 现在一切都像魅力一样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多