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

时间:2012-11-04 12:22:31

标签: javascript function scope

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

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

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

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

现在我喜欢这个:

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

为什么我没有收到警报?

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

7 个答案:

答案 0 :(得分: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">​

答案 1 :(得分:33)

你可以将它变成一个模块,并通过在Object中返回它来公开你的内部函数。

function outer() { 
    function inner() {
        console.log("hi");
    }
    return {
        inner: inner
    };
}
var foo = outer();
foo.inner();

答案 2 :(得分:6)

您没有调用函数inner,只是定义它。

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

    inner(); //Call the inner function

}

答案 3 :(得分:3)

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

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

或者

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

答案 4 :(得分:1)

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

var fname;

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

现在只是

fname();

答案 5 :(得分:0)

如果要使用“外部”功能调用“内部”功能,可以执行以下操作:

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

在“ onclick”事件上,您将调用以下函数:

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

答案 6 :(得分:0)

您还可以只使用return:

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

}
outer();