javascript - js의 클로저 문제로 어젯밤에 어려움을 겪었고 지금은 거의 죽었습니다.
迷茫
迷茫 2017-06-05 11:13:08
0
6
683

클로저에 대해 이제 막 배우기 시작해서 잘 이해가 안가는게 많네요. 그림과 같이 콘솔에 undefined가 어떻게 들어왔나요? return 함수만 실행했는데 왜 실행 결과가 2개나 나오나요? 자세히 설명해주세요~

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(6)
某草草

다음 두 코드 조각을 반복하여
var result = f1();로 시작할 수 있습니다. 변수는 var result = f1(); 變量指向函數
console.log(result()) 其實可以轉話為 f1()()
即函數執行 f1()返回的函數,即f2() 所以首先會執行 f1()下的f2() 函數 再執行f1()
所以首先console.log(n)1
在執行函數f1()時候return f2 ,但由於函數沒有對返回值,所以打印出undefinedconsole.log(result()) 함수를 가리킵니다. 실제로 f1()()

에 대한 대화, 즉 f1()을 실행하여 반환되는 함수, 즉 f2()를 변경할 수 있습니다. 이므로 f1이 먼저 실행됩니다. () 아래의 f2() 함수가 f1()를 실행합니다🎜그러므로 먼저 console.log(n)1🎜 f1() 함수를 실행하면 return f2가 출력되지만 함수는 값을 반환하지 않으며 undefine이 인쇄됩니다.
世界只因有你

기본적으로는

으아아아

f2가 값을 반환하지 않기 때문에 정의되지 않았습니다

伊谢尔伦

console.log(result())
첫 번째 출력 1, result()가 f2()를 호출하기 때문입니다
그런 다음 result()에 반환 값이 없기 때문에 출력이 정의되지 않습니다

为情所困

http://www.liaoxuefeng.com/wi...

이 글을 읽어보시길 권합니다

大家讲道理

첫 번째 result=f1(); 이때 result=f2; 그러면 console.log(result()); 먼저 결과인 f2를 실행하고, n의 값을 출력합니다. 1이므로 인쇄되는 내용은 1입니다. 그런 다음 result()에 반환 값이 없으므로 정의되지 않은 console.log(result());를 실행합니다.

世界只因有你

console.log(console.log())는 정의되지 않아야 합니다, 형

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿