Mik*_*ike 33 javascript scope function
我在按钮点击上调用一个函数,如下所示:
<input type="button" onclick="outer();" value="ACTION">?
function outer() {
alert("hi");
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,我得到一个警报:
现在当我喜欢这样的时候:
function outer() {
function inner() {
alert("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
我为什么不收到警报?
虽然内部函数具有外部函数的范围.
tec*_*bar 41
正如您所指出的那样,范围是正确的.但是,您不是在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
}
Run Code Online (Sandbox Code Playgroud)
要么
function outer() {
this.inner = function() {
alert("hi");
}
}
<input type="button" onclick="(new outer()).inner();" value="ACTION">?
Run Code Online (Sandbox Code Playgroud)
Mat*_*mes 37
你可以将它变成一个模块,并通过在Object中返回它来公开你的内部函数.
function outer() {
function inner() {
console.log("hi");
}
return {
inner: inner
};
}
var foo = outer();
foo.inner();
Run Code Online (Sandbox Code Playgroud)
你没有调用函数inner,只是定义它.
function outer() {
function inner() {
alert("hi");
}
inner(); //Call the inner function
}
Run Code Online (Sandbox Code Playgroud)
小智 6
同样,不是对问题的直接回答,而是通过网络搜索引导到这里的。最终通过简单地将内部函数分配给全局变量来暴露内部函数,而无需使用 return 等。
var fname;
function outer() {
function inner() {
console.log("hi");
}
fname = inner;
}
Run Code Online (Sandbox Code Playgroud)
现在只是
fname();
Run Code Online (Sandbox Code Playgroud)
你也可以试试这个。在这里你返回函数“内部”并用第二组括号调用。
function outer() {
return (function inside(){
console.log("Inside inside function");
});
}
outer()();
Run Code Online (Sandbox Code Playgroud)
或者
function outer2() {
let inside = function inside(){
console.log("Inside inside");
};
return inside;
}
outer2()();
Run Code Online (Sandbox Code Playgroud)