JavaScript 意外的副作用:修改共享变量

由于闭包可以访问外部函数的变量,如果不小心修改了这些变量,可能会导致意想不到的副作用。

function outer() {
  let counter = 0;

  return {
    increment: function() { counter++; },
    getCount: function() { return counter; }
  };
}

const myCounter = outer();
myCounter.increment();
myCounter.increment();
console.log(myCounter.getCount()); // 输出 2

在这个例子中, 虽然我们希望 counter 变量是 outer 函数的私有变量, 但是通过闭包, 我们仍然可以在外部修改它.

解决方法:

最小化共享: 尽量减少闭包对外部变量的修改,优先使用局部变量。
使用不可变数据: 如果外部变量是对象或数组,尽量使用不可变数据结构,避免意外修改。
更明确的接口: 如果确实需要修改, 那么就通过定义明确的接口来修改。

图片[1] - JavaScript 意外的副作用:修改共享变量 - 易航博客

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
易航的头像-易航博客
欢迎您留下宝贵的见解!
提交
易航的头像-易航博客

易航

取消
表情 代码 图片 快捷回复

    暂无评论内容