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

时间:2016-07-31 19:06:38

标签: javascript closures

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

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

2 个答案:

答案 0 :(得分:2)

尽可能接近:

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

bar();

或者直接传递foo作为参数。但是你不能只让foo存在于另一个范围内。所以你显然可以把它变成全球性的,但这也不是一个好主意。

答案 1 :(得分:-1)

如果这是正确的方法,请告诉我,这是我找到的出路。

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();