이 글은 주로 js의 함수 선언과 함수 표현식 분석을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
자바스크립트에서는 함수를 정의합니다.
함수 선언
function say(){ console.log('函数声明'); }
함수 표현식
var say = function(){ console.log('函数表达式'); }
일반적인 개발에서는 눈에 띄지 않는 차이가 있습니다. 다음 예제를 살펴보겠습니다. 먼저 마음 속으로 답을 생각해 보세요. 실행 결과는
say(); var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
자, 결과를 분석해 보겠습니다.
1. say 함수가 처음 호출될 때 함수가 정의되어 있지 않은데 왜 그런가요? "function"을 인쇄할 수 있나요? "statement"의 값은 어떻습니까? 그 이유는
javascript 인터프리터에서 변수 선언이 승격되는 메커니즘이 있기 때문입니다. 이는
함수 선언이 코드가 마지막에 작성되더라도 앞으로 승격된다는 의미입니다. 여전히 최전선으로 승진하세요. 함수 표현식으로 생성된 함수는 런타임에 할당되며 표현식 할당이 완료될 때까지 호출할 수 없습니다
따라서 함수가 아직 정의되지 않은 경우에도 위와 같이 함수 선언이 맨 앞으로 승격되었습니다. code는 다음과 같습니다.
函数声明 函数表达式 函数表达式
다음 두 가지를 비교하면 "함수 선언 승격"의 개념을 더 잘 이해할 수 있습니다.
1.var say; //变量被提升,此时的值为undefined say();// 函数被提升,输出“函数声明” var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
var say; console.log(say); say(); function say(){ console.log('函数声明'); } 输出: f say(){ console.log('函数声明'); } 函数声明
2. 이때는 먼저 간단하게
로 이해하면 될까요? 실제로 런타임 시 함수 선언의 승격으로 인해 실제 실행 순서는 다음과 유사합니다.var say; console.log(say); say(); var say = function(){ console.log('函数表达式'); } 输出: undefined Uncaught TypeError: say is not a function at <anonymous>:3:1
函数表达式
覆盖了函数声明
,因此输出了‘函数表达式’,然而到了第三次调用say函数时,此时打印的竟然还是‘函数表达式’??为什么后面的函数声明
没有覆盖前面的函数表达式
3. 요약
위 내용은 모두의 학습에 도움이 되기를 바랍니다. . 더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트를 팔로우하세요!
관련 권장 사항:
JS를 통해 의사 배열을 배열로 변환하는 방법JS를 사용하여 배열 차이 방법을 찾는 방법위 내용은 js 함수 선언 및 함수 표현 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!