javascript - 如何使用不同的变量重用闭包

标签 javascript closures

我想重用 sayMyName 函数,但使用不同的变量。如果我的构建方式错误,请告诉我,以及我正在尝试做什么的最佳实践是什么。

var sayMyName = function(myName) {
  console.log(myName)
};

var name1 = function() {
  // myName should not be a global variable 
  // because there may be more variables/functions 
  // that I'd want to closed inside sayMyName(). 
  // Declaring all of them to the global scope is not ideal.
  var myName = 'Walter';

  sayMyName();
  // I don't want to pass in myName as argument like this:
  // sayMyName(myName);
  // I want myName to be implicitly included in sayMyName()
  // I want to pass in everything that is declared in name1 to sayMyName() implicitly.
};

var name2 = function() {
  var myName = 'White'; 
  sayMyName();
}

name1(); // should give me 'Walter'
name2(); // should give me 'White'

最佳答案

我不确定为什么你特别想要一个闭包,但通过查看你的示例,似乎绑定(bind)比闭包更合适。

var sayMyName = function(myName) {
  console.log(myName)
};

var name1 = sayMyName.bind(undefined, 'Walter');
var name2 = sayMyName.bind(undefined, 'White');

name1(); // log 'Walter'
name2(); // log 'White'

关于javascript - 如何使用不同的变量重用闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135083/

相关文章:

javascript - AngularJS 服务相互注入(inject)导致无限循环

closures - 闭包的类型别名

rust - 如何表达闭包的生命周期限制以匹配特征有界生命周期?

javascript - 定义为参数的函数的闭包

Haskell 排列库函数 - 请澄清一下?

javascript 关闭,不起作用?

javascript - Shift 不是 JavaScript 中的函数

javascript - 使数组扁平化,了解解决方案

javascript - 在 JS 中使用 "in"关键字和映射

javascript - 如何获取 channel 上的所有消息并将其发布到 hastebin?不和谐.js