我希望允许locals
对象在调用函数时使其所有变量都在范围内。例如:
function test() {
console.log(string)
}
var locals = {
string: 'test'
}
function callTest(fn, locals) {
// INSERT MAGIC
fn()
}
callTest(test, locals) // -> should log 'test' without any errors
我想避免的事情:
function(locals) {
with (locals) {
console.log(string)
}
}
使用案例:我想创建一个带回调的模板系统。 本地人应该是本地人,而不是“本地人”对象。
module.exports = function(callback) {
callback(null, string)
}
是的,我可以做到以下几点,但这很难看。现在,我正是这样做的:
module.exports = function(locals, callback) {
callback(null, locals.string)
}
这是可能的,甚至是任何编程语言吗?
答案 0 :(得分:0)
不确定我完全理解,但是如何:(记录'测试')
function test( locals ) {
console.log( locals.string );
}
var locals = {
string: 'test';
}
function callTest(fn, locals) {
// INSERT MAGIC
fn( locals );
}
callTest(test, locals); // -> should log 'test' without any errors
答案 1 :(得分:0)
我知道你不是在寻找替代方案(在解决你的问题方面)。我不会与此争论。我唯一能想到的是,没有使用全局变量或函数参数(这将是正常的方式):
function test() {
console.log( this.string );
}
function callTest(fn, locals) {
// INSERT MAGIC
fn.call(locals);
}
var locals = {
string: 'test';
}
callTest(test, locals);
唯一与您的要求不符的是locals
变为this
。
答案 2 :(得分:0)
使用上下文属性(this.property
)或阅读链接文章并使用Function
构造函数,它绝对可以为您提供所需的内容。