如何在没有外部返回内部函数的情况下访问函数内部函数

How to access function inside function without outer returning inner one

我有一个函数'alpha',里面还有一个函数'beta'。如果我在 alpha 中没有 return beta,那么如何访问 beta。反正有这样做吗? (比如,我可以访问 alpha 写作 window.alpha(),因为在全局上下文中 alpha 变成了 window 对象的 属性,那么如何通过 属性 访问 beta =30=] dom 树)?

<html>
<head></head>
<body>

<script>

function alpha() { 
  console.log("hi");
  function beta() {
    console.log("hello");
  } 
} 
alpha(); //works 
window.alpha(); //works
beta(); //it is directly not accessible. How to access it if alpha does not return it

</script>

</body>
</html>

alpha() 在 Window Dom 但为什么不在 beta 中? (即使不在 alpha 内)

如果您不想 return beta,您可以 return this 并将 beta 定义为 this.beta :

要访问 beta(),您只需调用 alpha().beta() .

function alpha() {
  console.log("hi");

  this.beta = () => {
    console.log("hello");
  }

  return this;
}

alpha().beta();

使用 this:

声明 betaalpha 的成员

function alpha() {
  console.log("hi");

  this.beta = function() {
    console.log("hello");
  }
}

let a = new alpha();
a.beta();

您当前的实现阻止 JavaScript 从 alpha 外部访问 beta。在 JavaScript.

中阅读有关 private functions 的更多信息

使用this,您实际上可以将此类方法附加到函数alpha 的实例。这就是我在此解决方案中所做的。

通常你不能做这件事,你也可以选择这些选项,但在这些选项中你必须调用 alpha 一次才能获得测试版

//第一个选项

(function alpha() { 
  console.log("hi");
  function beta() {
    console.log("hello");
  } 
  window.beta = beta;
})() 

//第二个选项

使用thisbeta创建为alpha

中的属性
function alpha() {
  this.beta = function() {
    console.log("hello");
  }
}
let alphaObject = new alpha();
alphaObject.beta();

beta() 方法是函数 alpha 私有的。 Javascript 作用域的工作方式阻止您直接访问内部函数。使用 this.beta

将其创建为 alpha 的 属性