如何创建一个将传递的参数视为文字的函数?

How can I create a function which treats a passed parameter as a literal?

我确信这个问题之前已经被问过和回答过,但我似乎找不到合适的术语来找到答案。我需要动态创建一系列函数供以后使用,这些函数使用创建时由参数定义的某些值。例如:

var i = "bar";

var addBar = function(x) {
    // needs to always return x + " " + "bar"
  return x + " " + i;
}

i = "baz";

var addBaz = function(x) {
    // needs to always return x + " " + "baz"
  return x + " " + i;
}

alert(addBar("foo")); // returns "foo baz" because i = "baz"

有什么方法可以将 i 传递给这些函数,以便使用原始值,而不是对变量的引用?谢谢!

您将不得不做一些存储变量的事情。制作一个函数 returns 一个函数是一种方法。

var i = "bar";

var addBar = (function (i) { 
  return function(x) {
    return x + " " + i;
  }
}(i));

i = "baz";

var addBaz = (function (i) { 
  return function(x) {
    return x + " " + i;
  }
}(i));

console.log(addBar("foo")); 
console.log(addBaz("foo"));