我在按钮点击上调用一个函数,如下所示:
<input type="button" onclick="outer();" value="ACTION">
function outer() {
alert("hi");
}
它工作正常,我收到警报:
现在我喜欢这个:
function outer() {
function inner() {
alert("hi");
}
}
为什么我没有收到警报?
虽然内部函数在外部函数中有可用范围。
答案 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();