[javascript] JavaScript에서 중첩 함수를 작성할 수 있습니까?

JavaScript가 다른 함수 또는 중첩 함수 내에서 함수 작성을 지원하는지 궁금합니다 (블로그에서 읽었습니다). 이것이 정말 가능합니까?. 사실, 나는 이것을 사용했지만이 개념이 확실하지 않습니다. 나는 이것에 대해 정말로 불분명합니다. 도와주세요!



답변

정말 가능합니까?

예.

function a(x) {    // <-- function
  function b(y) { // <-- inner function
    return x + y; // <-- use variables from outer scope
  }
  return b;       // <-- you can even return a function.
}
console.log(a(3)(4));


답변

다음은 불쾌하지만 다른 종류의 객체처럼 함수를 처리하는 방법을 보여줍니다.

var foo = function () { alert('default function'); }

function pickAFunction(a_or_b) {
    var funcs = {
        a: function () {
            alert('a');
        },
        b: function () {
            alert('b');
        }
    };
    foo = funcs[a_or_b];
}

foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();


답변

함수는 다음과 같은 일류 객체입니다.

  • 함수 내에서 정의
  • 함수의 어느 지점에서나 다른 변수 또는 객체처럼 생성됩니다.
  • 함수에서 반환 됨 (위의 두 가지 후에 분명해 보일 수 있지만 여전히)

Kenny가 제공 한 예제를 기반으로 작성하려면 다음을 수행하십시오.

   function a(x) {
      var w = function b(y) {
        return x + y;
      }
      return w;
   };

   var returnedFunction = a(3);
   alert(returnedFunction(2));

5로 경고합니다.


답변

예, 다른 함수에 중첩 된 함수를 작성하고 호출 할 수 있습니다.

이 시도:

function A(){
   B(); //call should be B();
   function B(){

   }
}


답변

다른 함수에 전달한 함수를 변수로 반환 할 수있을뿐만 아니라 내부 계산에 사용할 수도 있지만 외부에서 정의 할 수도 있습니다. 이 예를 참조하십시오.

    function calculate(a,b,fn) {
      var c = a * 3 + b + fn(a,b);
      return  c;
    }

    function sum(a,b) {
      return a+b;
    }

    function product(a,b) {
      return a*b;
    }

    document.write(calculate (10,20,sum)); //80
    document.write(calculate (10,20,product)); //250


답변