위의 코드에서 외부 함수의 이름 변수는 내부 함수에 액세스할 수 있으며 내부 함수를 통해 내부 변수를 제외한 다른 방법은 내부 변수에 액세스할 수 있습니다. 내부 함수의 내부 변수는 외부 인수 및 변수에 대한 안전한 저장소 역할을 합니다. 내부 함수가 작업할 수 있도록 “영구” 및 “캡슐화된” 데이터를 보유합니다. 함수는 변수에 할당되거나 이름이 있을 필요가 없습니다. 구글 크롬을 사용 하는 경우, 이러한 예제와 함께 코딩할 수 있도록 개발 콘솔을 엽니다: Ctrl + Shift + J [MAC]: Cmd + 옵트 + J 기능 표현식의 경우 JavaScript 문은 함수 키워드로 시작 되지 않습니다 (그것은 m에 어딘가에 존재 명령문 코드의 iddle: 참고: 이것은 위의 구문(즉, 함수 funcName(){})을 사용하여 함수를 정의할 때만 작동합니다. 아래 코드가 작동하지 않습니다. 즉, 함수 게양은 함수 표현식이 아닌 함수 선언에서만 작동합니다. 함수 식 및 함수 선언에 의해 정의된 함수는 한 번만 구문 분석되지만 Function 생성자에 의해 정의된 함수는 구문 분석되지 않습니다. 즉, Function 생성자에게 전달된 함수 본문 문자열은 생성자가 호출될 때마다 구문 분석되어야 합니다. 함수 식은 매번 클로저를 생성하지만 함수 본문이 다시 분석되지 않으므로 함수 표현식은 여전히 “new Function(…)”보다 빠릅니다. 따라서 함수 생성자는 일반적으로 가능하면 피해야 합니다. 위의 코드의 외부 userName과 같이 함수 외부에서 선언된 변수를 전역이라고 합니다.
다른 기능이 제거되면 기능이 다르게 작동합니까? 예를 들어 함수에 두 개의 숫자를 전달한 다음 함수가 호출 프로그램에서 곱셈을 반환할 것으로 예상할 수 있습니다. 변수 할당을 함수 식 const fun() {}와 함께 사용하는 경우 많은 엔진이 이 변수에서 함수 이름을 추론할 수 있습니다. 콜백은 변수에 저장하지 않고 익명 함수 식으로 전달되는 경우가 많으며 엔진에서 이름을 확인할 수 없습니다. 인수가 있는 함수도 만들 수 있습니다. 인수는 괄호 번호 클래스 내에서 숫자배열을 보유하고 새 숫자를 삽입하는 메서드 addNumber()를 제공해야 합니다. addNumber()가 인수 없이 호출되면 숫자를 삽입할 수 있는 클로저가 반환됩니다. 이 클로저는 컨텍스트가 addNumbers() 메서드에서 어휘적으로 사용되므로 숫자Object 인스턴스로 이 것을 사용하는 화살표 함수입니다. 함수는 가변 값으로 직접 사용할 수 있습니다. 그래서 그들의 이름은 일반적으로 동사입니다. 코드를 읽는 사람이 함수가 수행하는 작업을 표시할 수 있도록 가능한 한 정확하고 함수가 수행하는 작업을 설명해야 합니다. 자바 스크립트는 우리가 어떤 이름없이 함수를 정의 할 수 있습니다.
이 이름 없는 함수를 익명 함수라고 합니다. 익명 함수를 변수에 할당해야 합니다. 그러나 일부 알고리즘은 간단한 반복 루프가 될 수 없습니다. 예를 들어 트리 구조의 모든 노드(예: DOM)를 가져오는 것이 재귀 입력을 사용하여 더 쉽게 수행됩니다. 함수(C)를 포함하는 함수(B)를 함유하고 있습니다. B 함수와 C 형식은 모두 여기에 있으므로 B는 A와 C에 액세스할 수 있습니다. 또한 C는 A에 액세스할 수 있는 B에 액세스할 수 있기 때문에 C는 A에 액세스할 수도 있습니다. 따라서 클로저는 여러 범위를 포함할 수 있습니다. 재귀적으로 포함 하는 함수의 범위를 포함 합니다.
이를 범위 체인이라고 합니다. (“체인”이라고 하는 이유는 나중에 설명됩니다.) 함수 선언은 함수 키워드로 만들어지며 필수 함수 이름, 괄호 쌍의 매개 변수 목록(para1, …, paramN) 및 본문 코드를 구분하는 중괄호 한 쌍의 {…} 가 있습니다. 예를 들어 방문자가 로그인하고 로그아웃하고 다른 곳에서 는 멋진 메시지를 표시해야 합니다.