MDN을 읽으면서 소장을 이해하세요.
8560 단어 JavaScripttech
의 목적
자바스크립트를 공부할 때 벽장이라는 개념을 만나게 된다.
어렵다
나도 MDN, 참고서 및 기타 인터넷 보도를 보고 이해하는데 많은 시간이 걸렸다(전혀 이해할 수 없을 수도 있다).
그래서 나는 MDN을 보면서 나 같은 초보자들에게 복제가 어떤 어려움이 있는지 쓰면서 이런 부분을 이해하기 쉬운 단서가 되는 기사를 쓰고 싶었다.
무엇이 옷장입니까?
MDN에는 다음과 같은 설명이 있다.
벽장은 조합 (포위) 함수와 주위 상태 (프록시 환경) 에 대한 인용 조합입니다.다시 말하면 복제는 내부 함수에서 외부 함수 역할 영역까지의 접근을 제공한다.JavaScript에서는 함수를 만들 때마다 클론이 생성됩니다.
참조 소스: https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures
・・?
주위 상태에 대한 인용 조합?
내부 함수에서 외부 함수 범위까지의 접근을 제공합니까?
어렵네.
문장을 이해하는 데 필요한 지식
MDN의 글을 읽기 위한 전제 지식이 있습니다.
그것은 오실로그래프에 관한 것이다.
역할 영역은 변수나 함수를 사용할 수 있는 유효한 범위를 가리킨다.
글로벌 또는 로컬 역할 영역에서 변수를 사용하려는 경우 이해할 수 있는 경우 해당 역할 영역에서 선언된 변수 또는 해당 역할 영역 외부에서 선언된 변수만 사용할 수 있으면 클론을 이해할 수 있습니다.
최초의 전선을 바라보다
MDN의 즐겨찾기 페이지에 쓰인 코드를 참조합니다.
같이 생각하자.
function init() {
var name = 'Mozilla'; // name は、init が作成するローカル変数
function displayName() { // displayName() は内部に閉じた関数
alert(name); // 親関数で宣言された変数を使用
}
displayName();
}
init();
참조 소스: MDN 웹 Docs 클론여기에 init 함수를 정의했습니다.
init 함수는 다음과 같다.
• 로컬 변수name 선언 및 문자열 대입 Mozilla
・display 정의Name 함수
• displayName 함수 실행
displayName 함수는 다음과 같습니다.
·displayName 함수 이외의 역할 범위인 init 함수 범위에서 선포된 로컬 변수name를 매개 변수로 받아서alert로 표시
이 코드를 JSFiddle 등으로 실행하면 Mozilla와 경보가 표시될 것 같습니다.
MDN에서는 이 코드와 함께 범위 내에서 변수를 사용하려면 범위 내에서 선언된 변수 또는 범위 밖에서 선언된 변수만 사용할 수 있습니다.
이 경우 displayName 함수 범위 내에서 외부 역할 영역 init 함수 범위에 표시된 로컬 변수name을 사용합니다.
두 번째 전선 봐요.
function makeFunc() {
var name = 'Mozilla';
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
참조 소스: MDN 웹 Docs 클론여기서 makeFunc 함수를 정의합니다.
아까의 init 함수와 구별은 다음과 같다.
• displayName 함수를 실행하는 것이 아니라 반환
makeFunc 함수를 정의한 후 전역적으로 변수 myFunc를 선언하고 makeFunc 함수를 실행하면 displayName 함수를 변수 myFunc에 대입합니다.
마지막으로 displayName 함수를 실행하기 위해 변수 myFunc를 호출합니다.
결과는 init () 함수를 실행할 때와 마찬가지로 Mozilla와 경보를 표시합니다.
변수 myFunc는 makeFunc 함수 이외에 실행되지만 makeFunc 함수 역할 영역의 로컬 변수name 변수의 내용을 표시할 수 있습니다.
어?
안 그래?
아까 나
한 범위 내에서 변수를 사용하려면 해당 범위 내에서 선언된 변수 또는 범위 외부에서 선언된 변수만 사용할 수 있습니다.
썼어.
그러나 전역 역할 영역에서makeFunc 함수 역할 영역에 명시된 로컬 변수name을 사용할 수 있습니다.
즉, 어떤 범위 내에서 성명된 변수는 이 범위 밖에서 사용된다는 것이다.
이게 왜 가능해?
displayName 함수는makeFunc 함수에서 생성된 함수이기 때문에 이 환경을 유지합니다. (로컬 변수name 사용 가능)
위에서 말한 바와 같이, 어떤 함수가 생성될 때, 이 환경은 함수에서 복제라고 불린다.
・・・
아직 못 찾았을 거예요.
다음 코드는 어떤 함수가 만들어졌을 때 함수에서 이 환경을 유지하는 것을 연상시키기 쉽다.
세 번째 전선 봐요.
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7 と表示される
console.log(add10(2)); // 12 と表示される
참조 소스: MDN 웹 Docs 클론복제의 성질을 이용하여 동적 함수를 생성할 수 있다.
동적 함수는 무엇입니까?
전선 좀 봐.
이 makeAdder 함수는 바로 동적 함수를 만들 수 있는 함수입니다.
makeAdder 함수의 매개 변수에 5를 건네주면 5+y를 되돌려 주는 함수를 생성하고 전역 변수add5로 대입합니다.매개 변수에 10을 넘길 때 10+y를 되돌려주는 함수를 생성하고 전역 변수add10에 대입합니다.
makeAdder 함수처럼 매개 변수에 전달되는 값에 따라 내부 처리도 달라지는데, 상황에 따라 함수를 생성하는 함수를 동적 함수라고 한다.
이것은 어느 부분이 벽장과 관계가 있습니까?
dd5 함수를 만들 때 로컬 변수 x는 5를 유지하고, dd10 함수를 만들 때 로컬 변수 x는 10을 유지합니다.
즉, 동적 함수는 어떤 함수가 만들어질 때 그 환경이 함수에서 유지되는 복제의 성질을 이용하여 만들어진 것이다.
총결산
・클론이란 어떤 함수가 만들어졌을 때 그 환경이 함수에서 유지되는 것을 말한다.
● 창고를 사용하면 이 역할 영역 이외의 역할 영역에서 성명된 변수를 사용할 수 있습니다.
・수납함을 사용하면 동적 함수를 만들 수 있다.
· MDN을 읽기 어렵다.
Reference
이 문제에 관하여(MDN을 읽으면서 소장을 이해하세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/keo/articles/580e575b205afb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)