javascript在函数内动态创建预定义的私有(private)变量

标签 javascript closures

我正在尝试在函数内动态创建预定义的私有(private)变量。 我使用的概念是从闭包 block 内返回函数 像这样:-

var bar = (function (){
  var foo = "Hello World";
    return function () {
    console.log(foo);
  } 
}());

bar();

这是我用来创建上述执行的等效动态表达式的代码

var createClosure = function(fn) {
  var __fn = function () {
    var foo = "Hello World";
    return fn;
  }
  return __fn();
}

var bar = createClosure(function () {
  console.log(foo);
});

bar();

但是运行上面的代码给了我ReferenceError: foo is not Defined 从闭包 block 返回的函数的等效表示应该是什么?

最佳答案

这是您能得到的最接近的结果:

function createClosure(fn) {
  const baz = {};
  baz.foo = "Hello World";
  return () => fn(baz);
}
const bar = createClosure(baz => console.log(baz.foo));

bar();

或者直接传入 foo 作为参数。但你不能仅仅让 foo 存在于另一个作用域中。因此,您显然可以将其全局化,但这也不是一个好主意。

关于javascript在函数内动态创建预定义的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687484/

相关文章:

javascript - 在 Firebase onWrite 中删除云函数中的当前节点

javascript - 重新加载并显示消息

Python 类关闭 : Is It What It Called?

java - 为什么这段 Java 代码有效?编译器不会提示关闭

groovy - 使用收集闭包方法在 groovy 中填充 HashMap

javascript - 基于Javascript中的多个条件对数组进行排序

javascript - Angular : can a controller watch server properties?

javascript - 在Google表格中,如何将A列中的#N/A替换为B列中的相应值

javascript - 是否使用闭包,John Conway 的 Game of Life

ios - Swift 闭包内更新的 UILabel 文本拒绝显示