javascript在函数中动态创建预定义的私有变量

javascript create predefined private variable inside a function dynamically

本文关键字:变量 预定义 创建 函数 动态 javascript      更新时间:2023-09-26

我试图在函数中动态创建一个预定义的私有变量。我使用的概念是从闭包块中返回函数像这样:-

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从闭包块返回的函数的等价表示应该是什么?

这是最接近的:

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

或者直接传入foo作为参数。但你不能只让foo存在于另一个范围内。因此,你显然可以将其全球化,但这也不是一个好主意。

如果这是正确的方法,下面是我找到的一条出路。

var createClosure = function(fn) {
  var __fn = function () {
    var foo = "Hello World";
    var entire = fn.toString();
    var body = entire.substring(entire.indexOf("{") + 1, entire.lastIndexOf("}"));
    return function () {
      eval(body);
    }
  }
  return __fn();
}
var bar = createClosure(function () {
  console.log(foo);
});
bar();