문제

내가 코딩 할 때 :

var a =
function()
{
    alert("44")
    return function(){alert(33)}
}()();

이 표현은 다음 순서로 평가됩니까?

  1. 함수를 정의하십시오.
  2. 참조 포인터를 전달하십시오
  3. A ()가 호출됩니다
  4. 새로운 기능 포인터로 반환합니다
  5. A ()가 다시 호출됩니다

그렇다면 왜 그렇게하면 구문 오류가 발생합니까?

function()
{
    alert("44")
    return function(){alert(33)}
}();

통역사는 먼저 왼쪽 피연산자를 원합니다 ...

그러나이 구문은 다음과 같습니다.

(
  function()
  {
    alert("44")
    return function(){alert(33)}
  };

)()

외부 괄호는 무엇을 의미 하는가 ???

감사

도움이 되었습니까?

해결책

언어의 구문입니다. 익명의 기능을 실행하려면 파렌으로 동봉해야합니다.

JS에는 구문이 예상보다 이상한 가장자리 케이스가 있습니다. 예를 들어, JSON이있는 문자열을 평가하는 것은 Parens로 싸지 않으면 작동하지 않습니다.

// Wrong
eval("{ ... }");
// Right
eval("({ ... })");

언어의 구문입니다.

즉, 나는 당신이 설명한 단계가 정확하지 않다고 생각합니다.

  1. 함수가 정의되고 호출됩니다. 경고 ( "44"); 결과적으로 발생합니다.
  2. 함수는 호출 된 다른 함수를 반환합니다. 경고 ( "33"); 발생합니다.
  3. 가장 안쪽 함수는 아무것도 반환하지 않으므로 A는 효과적으로 정의되지 않았습니다. A 형은 "정의되지 않은"을 반환합니다.

다른 팁

  1. function() { alert("44") return function(){alert(33)} } 당신은 함수를 정의합니다
  2. function() { alert("44") return function(){alert(33)} }() 익명 기능을 반환하는 기능이라고합니다 function(){alert(33)}
  3. function() { alert("44") return function(){alert(33)} }()() 반환 된 기능을 호출하므로 실제로는 function(){alert(33)}()

따라서 전체 실행은 다음과 같습니다.

alert("44"); alert(33);

나는 단지 자기 침입 기능을 배웁니다.
그리고 코드는 3이어야한다고 생각합니다. (function() { alert("44"); return function(){alert(33);} })()()

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top