以全局函数的方式调用局部函数

Invoke local function in a global function fashion?

本文关键字:函数 调用局 方式 全局      更新时间:2023-09-26

是否可以以全局函数的方式调用非全局函数?(即不使用限定词)例如

var lib = {
    notGlobalFn: function(){ /*...*/ }
};
var foobar = function(){
    notGlobalFn();
};
foobar();

我自己可以想到三个解决方案(如下所列),但我希望有另一个不使用全局函数或这个的解决方案。上下文或子函数。还有别的办法吗?(或者我是不是限制太多了?我是不是太学究了?)

我的重点是简洁,并且能够在库的上下文中定义foobar函数(也就是说,我可以定义一个库,并让人们以本地上下文的方式使用它)。

测试: http://jsbin.com/denawa/5/edit?javascript,控制台

解决方案# 1:——使用子功能

拒绝,因为foobar已集成到库中。

var lib = function(){
  var notGlobalFn = function(){ /*...*/ }
  return {
    foobar: function(){
      notGlobalFn();
    }
  }
};
lib().foobar()

解决方案2: -设置/设置全局函数

拒绝,因为使用了全局函数。

notGlobalFn = lib.notGlobalFn
foobar();
notGlobalFn = undefined

解决方案# 3: -

使用上下文

被拒绝,因为他们使用了限定符。

var foobar = function(){
    this.notGlobalFn();
};
foobar.call(lib);
OR
var foobar = function(){
    lib.notGlobalFn();
};
foobar();

总而言之,如果我必须在上述方法中选择一种,我会选择方案#2

* *编辑* *

另一个解决方案: -使用局部变量(解决方案#3的扩展)

var foobar = function(){
  var notGlobalFn = lib.notGlobalFn
  notGlobalFn();
};

和另一个解决方案: -将notGlobalFn添加到'this'(我不认为这会起作用)。

function init(scope){
  scope.notGlobalFn = lib.notGlobalFn
}
var foobar = function(){
  init(this)
  notGlobalFn()
};

这就是我最终采用的解决方案。不知道为什么这个会被否决/关闭,没有人要求澄清!

function init(scope){
  scope.notGlobalFn = lib.notGlobalFn
}
var foobar = function(){
  init(this)
  notGlobalFn()
};