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

时间:2018-04-12 07:30:10

标签: javascript function scope window-object

我有一个功能' alpha'还有另一个功能' beta'在里面。如果我没有在alpha中返回beta,那么如何访问beta版。无论如何这样做? (比如,我可以访问alpha编写window.alpha(),因为在全局上下文中alpha成为window对象的属性,然后如何通过window dom tree访问beta作为属性?)



<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>
&#13;
&#13;
&#13;

alpha()在Window Dom中,但为什么不测试? (甚至不在alpha内)

enter image description here

4 个答案:

答案 0 :(得分:3)

通常你不能做这件事,你可以选择这些选项,但在这些选项中,你必须拨打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();

答案 1 :(得分:2)

如果您不想返回beta,则可以返回this并将beta定义为this.beta

要访问beta(),您只需致电alpha().beta()

&#13;
&#13;
function alpha() {
  console.log("hi");

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

  return this;
}

alpha().beta();
&#13;
&#13;
&#13;

答案 2 :(得分:2)

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

将其创建为alpha的属性

答案 3 :(得分:1)

使用beta声明alphathis的成员:

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

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

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

您当前的实施会阻止JavaScript从beta之外访问alpha。在JavaScript中阅读有关private functions的更多信息。

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