在调用期间将变量添加到函数的作用域

时间:2012-10-17 22:53:38

标签: javascript

我希望允许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)
}

这是可能的,甚至是任何编程语言吗?

3 个答案:

答案 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构造函数,它绝对可以为您提供所需的内容。

  

Templating without the with Statement