너는 JS:Get Start:제3장(JS의 근원 발굴) 주석 몰라
22409 단어 reactprogrammingwebdevjavascript
제3장: JS의 근원 발굴
번갈아
value
과done
속성을 가지는데 그 중에서done
는 하나의 브리 값으로 기초 데이터 원본의 교체가 완성되기 전에 가짜이다.next()
방법은 수동적이기 때문에 ES6에는 교체기 표준에 사용되는 몇 가지 API가 포함되어 있다.소모 교체기
for..of
주기:// given an iterator of some data source:
var it = /* .. */;
// loop over its results one at a time
for (let val of it) {
console.log(`Iterator value: ${val}`);
}
// Iterator value: ..
// Iterator value: ..
// ..
보시다시피, 위의 코드는 모든 교체기 값을 하나하나 인쇄합니다....
또는 확장 연산자를 사용하여 교체기를 사용할 수 있다.예를 들면 다음과 같습니다.// An Array spread: spread an iterator into an array,
// with each iterated value occupying an array element position.
var vals = [ ...it ];
// OR
// A function call spread: spread an iterator into a function,
// call with each iterated value occupying an argument position.
doSomethingUseful( ...it );
화를 잘 내다
// an array is an iterable
var arr = [10, 20, 30];
for (let val of arr) {
console.log(`Array value: ${val}`);
}
// Array value: 10
// Array value: 20
// Array value: 30
shallow-copy
연산자...
를 사용하여 for..of
수조를 만들 수 있다.예를 들면 다음과 같습니다.var arrCopy = [ ...arr ];
var greeting = "Hello world!";
var chars = [...greeting];
chars;
// [ "H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!" ]
지도.
// given two DOM elements, `btn1` and `btn2`
var buttonNames = new Map();
buttonNames.set(btn1, "Button 1");
buttonNames.set(btn2, "Button 2");
for (let [btn, btnName] of buttonNames) {
btn.addEventListener("click", function onClick() {
console.log(`Clicked ${btnName}`);
});
}
values()
를 호출해서 값만 있는 교체기를 얻을 수 있다.for (let btnName of buttonNames.values()) {
console.log(btnName);
}
// Button 1
// Button 2
var arr = [10, 20, 30];
for (let [idx, val] of arr.entries()) {
console.log(`[${idx}]: ${val}`);
}
// [0]: 10
// [1]: 20
// [2]: 30
닫기
function greeting(msg) {
return function who(name) {
console.log(`${msg}, ${name}!`);
};
}
var hello = greeting("Hello");
var howdy = greeting("Howdy");
hello("Kyle");
// Hello, Kyle!
hello("Sarah");
// Hello, Sarah!
howdy("Grant");
// Howdy, Grant!
greeting(..)
의 실례를 만들고 이 함수는 변수를 닫는다who(..)
.내부 함수의 실례는 각각 msg
와 hello
라는 변수에 분배된다.howdy
변수를 보류한다.function counter(step = 1) {
var count = 0;
return function increaseCount() {
count = count + step;
return count;
};
}
var incBy1 = counter(1);
incBy1(); // 1
incBy1(); // 2
참고: 외부 역할 영역이 반드시 일반적인 함수는 아니지만 항상 외부 역할 영역에서 하나 이상의 변수가 내부 함수에 액세스할 수 있는 것은 아닙니다.for (let [idx, btn] of buttons.entries()) {
btn.addEventListener("click", function onClick() {
console.log(`Clicked on button (${idx})!`);
});
}
이 키워드.
작용역은 정적이며, 함수를 정의할 때와 위치에서 사용할 수 있는 고정된 변수를 포함한다.
상하문을 실행하는 것은 동적이며, 그것의 호출 방식에 전적으로 달려 있다. (그것이 어디에서 정의되었든지, 심지어는 어디에서 호출되었든지.)
msg
는 함수의 정적/고정 특성이 아니라 함수를 호출할 때마다 정의합니다.function classroom(teacher) {
return function study() {
console.log(`${teacher} says to study ${this.topic}`);
};
}
var assignment = classroom("Kyle");
outerthis
함수는 classroom(..)
키워드를 인용하지 않았기 때문에 지금까지 우리가 본 다른 함수와 같습니다.그러나 내부this
함수는 인용study()
이 없기 때문에 이것은 의식적인 함수가 된다.다시 말하면, 그것은 상하문 집행에 의존하는 함수이다.this
호출topic
:assignment()
// Kyle says to study undefined
지금 생각해 보자.var homework = {
topic: "JS",
assignment: assignment,
};
homework.assignment();
// Kyle says to study JS
여기서 이 함수를 호출하는this는 global
대상이 될 것이다.따라서 이 예에서 assignment()
는'JS'로 해석된다.주의:
homework
함수와 동적 상하문의 장점은 단일 함수와 서로 다른 대상에서 온 데이터를 더욱 유연하게 사용할 수 있다는 것이다.원형
var homework = {
topic: "JS",
};
this.topic
대상은 하나의 속성만 있지만 기본 원형 링크는 this-aware
대상에 연결되며 이 대상에는 흔히 볼 수 있는 내장 방법이 있다. 예를 들어 homework
,Object.prototype
등이다.homework.toString();
// [object Object]
객체 링크
toString()
를 사용하여 객체를 만듭니다.var homework = {
topic: "JS",
};
var otherHomework = Object.create(homework);
otherHomework.topic;
// "JS"
알림:
valueOf()
대상을 만듭니다. 이 대상은 원형에 연결된 곳이 없기 때문에 독립된 대상일 뿐입니다.어떤 경우에, 이것은 더욱 취할 수 있을 것이다.참고:
homework.topic;
// "JS"
otherHomework.topic;
// "JS"
otherHomework.topic = "Math";
otherHomework.topic; // "Math"
homework.topic;
// "JS" -- not "Math"
Object.create(..)
에 대한 분배는 Object.create(null)
에 이 명칭의 속성을 직접 생성한다.topic
의otherHomework
속성에 영향을 미치지 않습니다.재검토
topic
의 진정한 중요성은 특히 두드러진다.var homework = {
study() {
console.log(`Please study ${this.topic}`);
},
};
var jsHomework = Object.create(homework);
jsHomework.topic = "JS";
jsHomework.study();
// Please study JS
var mathHomework = Object.create(homework);
mathHomework.topic = "Math";
mathHomework.study();
// Please study Math
homework
함수를 호출할 때 서로 다른 this
결과를 얻었다.더 잘 이해하기 위해: 이 장은 여기까지입니다.나는 다음 장의 필기를 가지고 돌아올 것이다.
그 전에 즐겁게 코딩하세요!
만약 당신이 이 노트들을 읽는 것을 좋아하거나, 어떤 건의나 의문이 있다면, 평론에서 당신의 관점을 저에게 알려 주십시오.
연락하려면 다음 링크를 클릭하십시오.
| GitHub |
Reference
이 문제에 관하여(너는 JS:Get Start:제3장(JS의 근원 발굴) 주석 몰라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rajat2502/you-don-t-know-js-get-started-chapter-3-digging-to-the-roots-of-js-notes-412n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)