在 Javascript 中调用另一个函数中定义的函数

IT技术 javascript function scope
2021-03-13 03:48:33

我在按钮点击时调用一个函数,如下所示:

<input type="button" onclick="outer();" value="ACTION">​

function outer() { 
    alert("hi");       
}

它工作正常,我收到警报:

现在,当我这样做时:

function outer() { 
    function inner() {
        alert("hi");
    }
}

为什么我没有收到警报?

虽然内部函数在外部函数中有一个可用的范围。

6个回答

你可以把它变成一个module并通过在一个对象中返回它来公开你的内部函数。

function outer() { 
    function inner() {
        console.log("hi");
    }
    return {
        inner: inner
    };
}
var foo = outer();
foo.inner();
也能 return { inner }
2021-04-17 03:48:33
非常感谢!我一直在寻找这个答案一段时间。:D
2021-04-20 03:48:33
标记答案的第一部分是这个特定问题的正确答案,但谷歌把我带到这里,这实际上是我正在寻找的,搜索:“javascript 访问函数内的函数。” 我猜这就是为什么即使这个问题是错误的,它也有如此多的赞成票。
2021-05-17 03:48:33

正如您所指出的,范围是正确的。但是,您不会在inner任何地方调用该函数。

您可以执行以下任一操作:

function outer() { 

    // when you define it this way, the inner function will be accessible only from 
    // inside the outer function

    function inner() {
        alert("hi");
    }
    inner(); // call it
}

或者

function outer() { 
    this.inner = function() {
        alert("hi");
    }
}

<input type="button" onclick="(new outer()).inner();" value="ACTION">​
@Mike:最好忘记它,它真的不适合这个。他正在创建outer构造函数的一个新实例并在其上调用一个方法
2021-04-26 03:48:33
@Mike - 如果您需要inner()在外面访问outer(),第二种方式可以让您。但是您在这里不需要第二种方式来满足您的要求。
2021-05-01 03:48:33
顺便说一句,那块叫 onclick="(new outer()).inner();" 是什么,我第一次看到它
2021-05-12 03:48:33

你不是在调用函数inner,只是定义它。

function outer() { 
    function inner() {
        alert("hi");
    }

    inner(); //Call the inner function

}

你也可以试试这个。在这里你返回函数“内部”并用第二组括号调用。

function outer() {
  return (function inside(){
    console.log("Inside inside function");
  });
}
outer()();

或者

function outer2() {
    let inside = function inside(){
      console.log("Inside inside");
    };
    return inside;
  }
outer2()();

同样,不是对问题的直接回答,而是通过网络搜索引导到这里的。最终通过简单地将其分配给全局变量来公开内部函数而不使用 return 等。

var fname;

function outer() {
    function inner() {
        console.log("hi");
    }
    fname = inner;
}

现在只是

fname();