REC

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

易航
2月20日发布

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

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 分享 赞赏
评论 抢沙发
OωO
取消 登录评论