我正在尝试动态地在函数内创建预定义的私有变量。 我正在使用的概念是从闭包块中返回的函数 像这样: -
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
从闭包块返回的函数的等效表示应该是什么?
答案 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();