javascript - JavaScript工厂函数修改闭包范围外的变量
问题描述
为什么变量“OnDone”在工厂范围内保持不变?
const foo = () => {
let OnDone = null;
const Do = function() {
console.log(OnDone);
if (typeof OnDone === 'function')
OnDone();
}
return {
Do,
OnDone
};
}
let f = foo();
f.OnDone = () => {
console.log('OnDone');
};
f.Do();
解决方案
let onDone = null
onDone
在函数范围内定义一个变量foo
不是属性,但是当你这样做时
f.onDone
它为可以访问的onDone
属性 增加了价值,但在您使用的代码中仍然指的是在本地范围内定义的f
this.onDone
onDone
onDone
你可能想这样做
function foo(){
this.OnDone = null;
const Do = function() {
console.log(this.OnDone);
if (typeof this.OnDone === 'function')
this.OnDone();
}
return {Do, onDone:this.OnDone};
}
let f = new foo();
f.OnDone = () => {
console.log('OnDone');
};
f.Do();
推荐阅读
- c - 将长整数数组存储到文件中
- android - 在 Android 中从 Uri 获取文件名
- python - int 中的日期列
- sql - 为什么 where exists 不返回子查询中的所有行?
- ruby-on-rails - Redis 重定向到 Heroku 上的 localhost (Rails 6)
- javascript - 如何更改 SELECT2 的背景颜色
- erpnext - Frappe:短队列、默认队列和长队列有什么区别
- r - 如何将“时间”列转换为 R 中的专用时间类
- gremlin - 是否有可能在遍历中获得哪个或条件为真?
- git - 将 git 分支专用于单独的项目是否很常见?