繁体   English   中英

如何调用在另一个函数中声明的子函数

[英]How to call child function which is declared inside another function

函数b在函数a中声明。 所以,我试图在功能a之外调用功能b。 它没有被调用。

var a = function() {
  alert("a");
  var b = function() {
    alert("b");
  }
}

输出:-功能b称为带有消息b的警报框

您需要返回b并使用它。 这将涉及调用函数a开头,但随后您将拥有一个可以反复调用以提醒b的函数:

 var a = function() { alert("a"); var b = function() { alert("b"); } return b; } var messageB = a(); messageB(); messageB(); 

尝试在“ a”函数外部声明“ b”变量:

var b;
var a = function() {
    alert("a");
    b = function() {
        alert("b");
    };
};

这样,您可以访问b从外面a ,因为它是在它之外声明。 a被称为第一次,这将是undefined的,所以你不能调用ba 此外,如果你调用a两次,以前b将被重写,如下所示:

  var b;

  var a = function(name) {
    b = function() { alert(name); };
  };

  a("first version");
  b(); // first version
  a("second version");
  b(); // second version

如果你不需要任何内部变量a内部b ,没有理由嵌套虽然功能,在这种情况下,你应该有两个独立的功能:

  var a = function() { alert("a"); };
  var b = function() { alert("b"); };

首先返回该函数并调用它,

 var a = function() { alert("a"); var b = function() { alert("b"); } return b; } var b = a(); b(); 

如前所述,您可以简单地返回函数b。 Java语言中的函数可以像这样传递,这是垃圾收集语言的一个很好的功能。

但是您可以做得更好,如果您想公开多个功能呢?

您可以只返回带有附加方法的对象。

 function A() { let value = 0; return { inc: () => ++ value, dec: () => -- value, show: () => console.log(value) } } const a1 = A(); a1.inc(); a1.inc(); a1.show(); const b1 = A(); b1.inc(); b1.dec(); b1.dec(); b1.show(); 

现在,上面的内容看起来与所谓的class非常相似,但事实并非如此。 这样做的一个缺点是,如果您想创建数千个实例,则一个类会更好,因为它可以将其方法放在原型上。 话虽如此,正如使用React Hooks所发现的那样,那时还不是很糟糕。

上述的一个大好处,就是你不必陷入泥泞的世界this实例的背景下。

为了完整起见,这里是一个类版本。

 class A { value = 0; inc() { ++ this.value; } dec() { -- this.value; } show() { console.log(this.value) } }; const a1 = new A(); a1.inc(); a1.inc(); a1.show(); const b1 = new A(); b1.inc(); b1.dec(); b1.dec(); b1.show(); 

也有人说一个简单的解决方案是使ab都成为全局变量,但越避免使用全局变量越好,因此,如果ab有共同的意图,则使用闭包甚至一个类会更好。

或者如果您需要对象批准

`var a = function() {
  print("a");
  this.b = function() {
    print("b");
  }
  return this
}
a().b()`

所有其他答案都足够好,但是以防万一您可能喜欢directly calling inner function without returning该函数的方法。

您可以将内部函数(即b包装成这种情况,作为这样的自调用函数,

var a = function() {
  alert("a");
  var b = (function() {
    alert("b");
  })()
}

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM