44

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

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

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

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

现在当我这样做时:

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

为什么我没有收到警报?

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

4

10 回答 10

64

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

function outer() { 
    function inner() {
        console.log("hi");
    }
    return {
        inner: inner
    };
}
var foo = outer();
foo.inner();
于 2015-12-18T21:29:51.683 回答
60

正如您所指出的,范围界定是正确的。但是,您不会在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">​
于 2012-11-04T12:23:47.137 回答
8

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

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

    inner(); //Call the inner function

}
于 2012-11-04T12:23:35.887 回答
6

您也可以试试这个。在这里,您将返回“内部”函数并使用第二组括号进行调用。

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

或者

function outer2() {
    let inside = function inside(){
      console.log("Inside inside");
    };
    return inside;
  }
outer2()();
于 2017-11-17T11:15:20.347 回答
3

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

var fname;

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

现在只是

fname();
于 2021-02-23T08:20:42.090 回答
0

如果你想用“外部”函数调用“内部”函数,你可以这样做:

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

在“onclick”事件中,您可以像这样调用函数:

<input type="button" onclick="outer().inner();" value="ACTION">​
于 2020-04-17T19:27:02.017 回答
0

你也可以只使用return:

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

}
outer();
于 2020-10-08T05:58:13.633 回答
0
function outer() { 

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

你应该试试这个

于 2021-10-08T05:51:15.690 回答
0

在 JavaScript 中

如果使用 ES6
static函数可以在一个class

如果使用 ES5
经过几天的使用,下面是我想出的,
它是最小的,也有很多方便:

function MathFunctions() {
    let thefo = {}; // the functions object

    thefo.sum = sum = (a, b) => {
        return a + b;
    };
    thefo.avg = avg = (a, b) => {            // name is repeated 2 times - minor inconvenience
        return sum(a, b) / 2;                // calls sum, another function without using 'this'
    };

    return thefo;                            // no need to go down & export here always for each new function - major convenience
}

// Usage
console.log(MathFunctions().sum(1, 2));
console.log(MathFunctions().avg(1, 2));
// OR
const mf = MathFunctions();
console.log(mf.sum(1, 2));
console.log(mf.avg(1, 2));
于 2022-01-13T02:57:12.133 回答
0

试试这个解决方案

const greet = (greeting) => {
    return function (name) {
        console.log(`${greeting} ${name}`);
    };
};

greet('Hi !')('JAHID');

在此处输入图像描述

于 2022-02-22T03:31:35.137 回答