ì´ ê¸ìì ë¹ë기 íë¡ê·¸ëë°ì´ 무ìì¸ì§, ì íìíì§ ì¤ëª íê³ ìì¬ì JavaScriptìì ë¹ë기 í¨ìê° êµ¬íë ëª ê°ì§ ë°©ë²ì ëí´ ê°ëµíê² ì¤ëª í ê²ì ëë¤.
íìí ì¬ì ì§ì 기본ì ì¸ ì»´í¨í° ì¬ì©ë¥ë ¥, í¨ìì ì´ë²¤í¸ ì²ë¦¬ê¸°ë¥¼ í¬í¨í JavaScript 기ì´ì ëí ì´í´ 목ì ë¹ë기 JavaScriptê° ë¬´ìì¸ì§, ë기 JavaScriptì ì´ë»ê² ë¤ë¥¸ì§, ê·¸ë¦¬ê³ ì íìíì§ì ëí ìµìí¨ì ì»ê¸° ìí¨ë¹ë기 íë¡ê·¸ëë°ì ìì ì´ ìë£ë ëê¹ì§ 기ë¤ë¦¬ì§ ìê³ ì ì¬ì ì¼ë¡ ì¤ë ì¤íëë ìì ì ììíì¬ í´ë¹ ìì ì´ ì¤íëë ëììë ë¤ë¥¸ ì´ë²¤í¸ì ìëµí ì ìê² íë 기ì ì ëë¤. ìì ì´ ìë£ëë©´ íë¡ê·¸ë¨ì´ 결과를 ì ê³µí©ëë¤.
ë¸ë¼ì°ì ê° ì ê³µíë ë§ì 기ë¥, í¹í ê°ì¥ í¥ë¯¸ë¡ì´ ê²ë¤ì ìê°ì´ ì¤ë 걸릴 ê°ë¥ì±ì´ ìì¼ë¯ë¡ ë¹ë기ì ì ëë¤. ì를 ë¤ì´ ë¤ìê³¼ ê°ìµëë¤.
fetch()
를 ì´ì©í´ HTTP ìì² ë§ë¤ê¸°getUserMedia()
를 ì¬ì©í´ ì¬ì©ìì ì¹´ë©ë¼ ëë ë§ì´í¬ì ì ê·¼í기showOpenFilePicker()
를 íµí´ ì¬ì©ììê² íì¼ ì íì ìì²ë°ë¼ì ì¬ë¬ë¶ë§ì ë¹ë기 í¨ì를 ì주 구í í íìë ìì§ë§ ì¬ë°ë¥´ê² ì¬ì© í´ì¼ í ê²½ì°ê° ë§ìµëë¤.
ì´ ê¸ììë ë¹ë기 í¨ì를 íìíê² íë ì¥ê¸° ì¤í ë기 í¨ìì 문ì ì ì ì´í´ë³´ë ê²ì¼ë¡ ììíê² ìµëë¤.
ë기 íë¡ê·¸ëë°ìë ì½ë를 íë² ë³´ì¸ì.
const name = "Miriam";
const greeting = `Hello, my name is ${name}!`;
console.log(greeting);
// "Hello, my name is Miriam!"
ì´ ì½ëë
name
ì´ë¼ë 문ìì´ì ì ì¸í©ëë¤.name
ì ì¬ì©íì¬ greeting
ì´ë ëë¤ë¥¸ 문ìì´ì ì ì¸í©ëë¤.ì¬ê¸°ì ë¸ë¼ì°ì ë ì¤ì§ì ì¼ë¡ íë¡ê·¸ë¨ì ìì±í ììëë¡ í ì¤ì© ì¤ííë¤ë ì ì 주목í´ì¼ í©ëë¤. ë¸ë¼ì°ì ë ê° ì§ì ìì ë¤ì ì¤ë¡ ëì´ê°ê¸° ì ê¹ì§ íì¬ ë¼ì¸ì ìì ì´ ëë ëê¹ì§ 기ë¤ë¦½ëë¤. ê° ë¼ì¸ë¤ì ì´ì ë¼ì¸ì ìì¡´íê³ ìì¼ë ì´ë ê² í´ì¼ íì£ .
ë°ë¼ì ë기 íë¡ê·¸ëë°ì´ ë©ëë¤. ì´ë ê² ë³ëì í¨ìë¡ í¸ì¶í´ë ë기ì ëë¤.
function makeGreeting(name) {
return `Hello, my name is ${name}!`;
}
const name = "Miriam";
const greeting = makeGreeting(name);
console.log(greeting);
// "Hello, my name is Miriam!"
makeGreeting()
ì ë기 í¨ìì
ëë¤. ìëíë©´ í¸ì¶ìë í¨ìì ìì
ì´ ìë£ë ëê¹ì§ 기ë¤ë ¸ë¤ê° ê°ì ë°íí´ì¼ ê³ì ì§íí ì ì기 ë문ì
ëë¤.
ë기 í¨ìê° ì¤ë ìê°ì ê±¸ì³ ì¤íëë©´ ì´ë¨ê¹ì?
ìë íë¡ê·¸ë¨ì ë§¤ì° ë¹í¨ì¨ì ì¸ ìê³ ë¦¬ì¦ì ì¬ì©íì¬ "Generate primes" ë²í¼ì í´ë¦í ë ì¬ë¬ ê°ì í° ìì를 ìì±í©ëë¤. ì¬ì©ìê° ì ë ¥íë ì«ìê° ì»¤ì§ìë¡ ìì ìê°ë ë ì¤ë 걸립ëë¤.
<label for="quota">Number of primes:</label>
<input type="text" id="quota" name="quota" value="1000000" />
<button id="generate">Generate primes</button>
<button id="reload">Reload</button>
<div id="output"></div>
function generatePrimes(quota) {
function isPrime(n) {
for (let c = 2; c <= Math.sqrt(n); ++c) {
if (n % c === 0) {
return false;
}
}
return true;
}
const primes = [];
const maximum = 1000000;
while (primes.length < quota) {
const candidate = Math.floor(Math.random() * (maximum + 1));
if (isPrime(candidate)) {
primes.push(candidate);
}
}
return primes;
}
document.querySelector("#generate").addEventListener("click", () => {
const quota = document.querySelector("#quota").value;
const primes = generatePrimes(quota);
document.querySelector("#output").textContent =
`Finished generating ${quota} primes!`;
});
document.querySelector("#reload").addEventListener("click", () => {
document.location.reload();
});
"Generate primes"를 í´ë¦í´ë³´ì¸ì. ì¬ë¬ë¶ì ì»´í¨í°ê° ì¼ë§ë ë¹ ë¥¸ì§ì ë°ë¼ ë¬ë¼ì§ê² ì§ë§, íë¡ê·¸ë¨ì´ "Finished!" ë©ìì§ë¥¼ ì¶ë ¥í기 ì ìë§ ëª ì´ê° 걸릴 ê²ì ëë¤.
ì¥ê¸° ì¤í ë기 í¨ìì 문ì ì ë¤ì ìì ë ì ë ¥í ì ìë í ì¤í¸ ìì를 ì¶ê°í ê²ì ì ì¸íê³ ë ì´ì ìì ì ê°ìµëë¤. ì´ë²ìë "Generate primes"를 ë른 í ë°ë¡ í ì¤í¸ ììì ì무 ê¸ì´ë ì ë ¥í´ë³´ì¸ì.
generatePrimes()
í¨ìê° ì¤í ì¤ì¸ ëì íë¡ê·¸ë¨ì´ ìì í ìëµíì§ ìë ê²ì íì¸í ì ìì ê²ëë¤. ì무ê²ë ì
ë ¥í ì ìê³ í´ë¦ë ìë ê²ì´ë©° ê·¸ ì¸ ë¤ë¥¸ ê²ë í ì ììµëë¤.
<label for="quota">Number of primes:</label>
<input type="text" id="quota" name="quota" value="1000000" />
<button id="generate">Generate primes</button>
<button id="reload">Reload</button>
<textarea id="user-input" rows="5" cols="62">
Try typing in here immediately after pressing "Generate primes"
</textarea>
<div id="output"></div>
textarea {
display: block;
margin: 1rem 0;
}
function generatePrimes(quota) {
function isPrime(n) {
for (let c = 2; c <= Math.sqrt(n); ++c) {
if (n % c === 0) {
return false;
}
}
return true;
}
const primes = [];
const maximum = 1000000;
while (primes.length < quota) {
const candidate = Math.floor(Math.random() * (maximum + 1));
if (isPrime(candidate)) {
primes.push(candidate);
}
}
return primes;
}
document.querySelector("#generate").addEventListener("click", () => {
const quota = document.querySelector("#quota").value;
const primes = generatePrimes(quota);
document.querySelector("#output").textContent =
`Finished generating ${quota} primes!`;
});
document.querySelector("#reload").addEventListener("click", () => {
document.querySelector("#user-input").value =
'Try typing in here immediately after pressing "Generate primes"';
document.location.reload();
});
ì´ë ì¥ê¸° ì¤í ë기 í¨ìì 기본ì ì¸ ë¬¸ì ì ëë¤. ì°ë¦¬ì íë¡ê·¸ë¨ì´ íìë¡ íë ê²ì ë¤ìê³¼ ê°ìµëë¤.
ì´ê²ì´ ë°ë¡ ë¹ë기 í¨ìê° í ì ìë ì¼ì ëë¤. ì´ ê¸ì ëë¨¸ì§ ë¶ë¶ììë ë¹ë기 í¨ìê° JavaScriptìì 구íëë ë°©ë²ì ê´í´ ì¤ëª í©ëë¤.
ì´ë²¤í¸ ì²ë¦¬ê¸°ë°©ê¸ ë¤ì ë¹ë기 í¨ìì ëí ì¤ëª ì¼ë¡ ì¬ë¬ë¶ì ì´ë²¤í¸ ì²ë¦¬ê¸°ë¥¼ ë ì¬ë¦´ ì ììµëë¤. ë§ì½ ë ì¬ëë¤ë©´ ë§ìµëë¤. ì´ë²¤í¸ ì²ë¦¬ê¸°ë ì¤ì ë¡ ë¹ë기 íë¡ê·¸ëë°ì í ííì ëë¤. ì´ë²¤í¸ê° ë°ìí ëë§ë¤ í¸ì¶ëë í¨ì(ì´ë²¤í¸ ì²ë¦¬ê¸°)를 ì ê³µíë ê²ì¼ë¡ ë§ì´ì£ . "ì´ë²¤í¸"ê° "ë¹ë기 ìì ìë£"ì¸ ê²½ì°, ì´ ì´ë²¤í¸ë¥¼ ì¬ì©íì¬ í¸ì¶ììê² ë¹ë기 í¨ì í¸ì¶ì 결과를 ì릴 ì ììµëë¤.
ì¼ë¶ ì´ê¸° ë¹ë기 APIë ì´ë¬í ì´ë²¤í¸ ë°©ìì ì¬ì©íìµëë¤. XMLHttpRequest
ë JavaScript를 ì¬ì©íì¬ ì격 ìë²ì HTTP ìì²ì í ì ìë APIì
ëë¤. HTTP ìì²ì ìê°ì´ 걸릴 ì ìë ìì
ì´ë¼ ë¹ë기 APIì´ë©° ì´ë²¤í¸ ìì 기를 XMLHttpRequest
ê°ì²´ì ì°ê²°í´ ìì²ì ì§í ìí ë° ìµì¢
ìë£ì ëí ì림ì ë°ìµëë¤.
ë¤ì ìì ììë ì´ë¥¼ ì¤ì ë¡ ë³´ì¬ ì¤ëë¤. "Click to start request"를 í´ë¦íì¬ ìì²ì ë³´ë´ë³´ì¸ì. ìë¡ì´ XMLHttpRequest
를 ìì±íê³ ì´ê²ì loadend
ì´ë²¤í¸ë¥¼ ìì í©ëë¤. ì²ë¦¬ê¸°ë ìí ì½ëì í¨ê» "Finished!" ë©ìì§ë¥¼ 기ë¡í©ëë¤.
ì´ë²¤í¸ ìì 기를 ì¶ê°í í ìì²ì ë³´ë ëë¤. ì´ë ìì²ì´ ììë ì´í "Started XHR request"를 기ë¡í ì ìëë°, ì´ë ìì²ì´ ì§íëë ëì íë¡ê·¸ë¨ì´ ê³ì ì¤íëê³ ììì ë»íë©° ìì²ì´ ìë£ë ë ì´ë²¤í¸ ì²ë¦¬ê¸°ê° í¸ì¶ë©ëë¤.
<button id="xhr">Click to start request</button>
<button id="reload">Reload</button>
<pre readonly class="event-log"></pre>
pre {
display: block;
margin: 1rem 0;
}
const log = document.querySelector(".event-log");
document.querySelector("#xhr").addEventListener("click", () => {
log.textContent = "";
const xhr = new XMLHttpRequest();
xhr.addEventListener("loadend", () => {
log.textContent = `${log.textContent}Finished with status: ${xhr.status}`;
});
xhr.open(
"GET",
"https://raw.githubusercontent.com/mdn/content/main/files/en-us/_wikihistory.json",
);
xhr.send();
log.textContent = `${log.textContent}Started XHR request\n`;
});
document.querySelector("#reload").addEventListener("click", () => {
log.textContent = "";
document.location.reload();
});
ì´ì ì ì í ì´ë²¤í¸ ì²ë¦¬ê¸°ì ì ì¬íì§ë§, ì´ë²¤í¸ê° ë²í¼ í´ë¦ê³¼ ê°ì ì¬ì©ì íëì´ ìë ì´ë¤ ê°ì²´ì ìí ë³íë¼ë ì ì´ ë¤ë¦ ëë¤.
ì½ë°±ì´ë²¤í¸ í¸ë¤ë¬ë ì½ë°±ì í¹ì ì íì ëë¤. ì½ë°±ì ê·¸ë¥ ì ì í ìì ì í¸ì¶ë ê²ì¼ë¡ ììíì¬ ë¤ë¥¸ í¨ìë¡ ì ë¬ëë í¨ìì ëë¤. ë°©ê¸ ì´í´ë³¸ ê²ì²ë¼ ì½ë°±ì JavaScriptìì ë¹ë기 í¨ì를 구ííë 주ì ë°©ìì´ììµëë¤.
ê·¸ë¬ë ì½ë°± ê¸°ë° ì½ëë ì½ë°±ì´ ì½ë°±ì ê°ì§ë í¨ì를 í¸ì¶íë ê²½ì° ì´í´í기 ì´ë ¤ì¸ ì ììµëë¤. ì´ê²ì ì¼ë ¨ì ë¹ë기 í¨ìë¡ ë¶í´ëë ìì ì ìíí´ì¼ íë ì¼ë°ì ì¸ ìí©ì ëë¤. ì를 ë¤ì´, ë¤ìì íë² ë³´ê² ìµëë¤.
function doStep1(init) {
return init + 1;
}
function doStep2(init) {
return init + 2;
}
function doStep3(init) {
return init + 3;
}
function doOperation() {
let result = 0;
result = doStep1(result);
result = doStep2(result);
result = doStep3(result);
console.log(`result: ${result}`);
}
doOperation();
ì¬ê¸°ìë ì¸ ë¨ê³ë¡ ëëë ë¨ì¼ ìì ì´ ììµëë¤. ê° ë¨ê³ë ì´ì ë¨ê³ì ìì¡´ì ì ëë¤. ì´ ìì ìì 첫 ë²ì§¸ ë¨ê³ë ì ë ¥ê°ì 1ì ì¶ê°íê³ , ë ë²ì§¸ ë¨ê³ë 2를 ì¶ê°íê³ , ì¸ ë²ì§¸ ë¨ê³ë 3ì ì¶ê°í©ëë¤. 0ì ì ë ¥ë¶í° ììíì¬ ìµì¢ ê²°ê³¼ë 6(0 + 1 + 2 + 3)ì ëë¤. ë기ì íë¡ê·¸ë¨ì¼ë¡ì, ì´ê²ì ë§¤ì° ê°ë¨í©ëë¤. íì§ë§ ì½ë°±ì ì¬ì©íì¬ ë¨ê³ë¥¼ 구ííë©´ ì´ë¨ê¹ì?
function doStep1(init, callback) {
const result = init + 1;
callback(result);
}
function doStep2(init, callback) {
const result = init + 2;
callback(result);
}
function doStep3(init, callback) {
const result = init + 3;
callback(result);
}
function doOperation() {
doStep1(0, (result1) => {
doStep2(result1, (result2) => {
doStep3(result2, (result3) => {
console.log(`result: ${result3}`);
});
});
});
}
doOperation();
ì½ë°± ë´ë¶ìì ì½ë°±ì í¸ì¶í기 ë문ì ê¹ê² ì¤ì²©ë doOperation()
í¨ìê° ìê¹ëë¤. ì´ í¨ìë ì½ê³ ëë²ê¹
í기 í¨ì¬ ì´ë µìµëë¤. ì´ê²ì ëëë¡ "ì½ë°± ì§ì¥(callback hell)" ëë "íë¼ë¯¸ë ì¤ë¸ ë (pyramid of doom)"ì´ë¼ê³ ë¶ë¦½ëë¤. (ìëíë©´ ë¤ì¬ ì¨ì§ ë¶ë¶ì´ ììì ë´¤ì ë í¼ë¼ë¯¸ëì²ë¼ ë³´ì´ê±°ë ì.)
ì´ë ê² ì½ë°±ì ì¤ì²©íë©´ ì¤ë¥ ì²ë¦¬ë ë§¤ì° ì´ë ¤ìì§ ì ììµëë¤. ìì ë 벨ìì í ë²ë§ ì¤ë¥ë¥¼ ì²ë¦¬íë ëì "í¼ë¼ë¯¸ë"ì ê° ë 벨ìì ì¤ë¥ë¥¼ ì²ë¦¬í´ì¼ íë ê²½ì°ê° ë§ìµëë¤.
ì´ë¬í ì´ì ë¡ ëë¶ë¶ì ìµì ë¹ë기 APIë ì½ë°±ì ì¬ì©íì§ ììµëë¤. ëì JavaScriptìì ë¹ë기 íë¡ê·¸ëë°ì í ëë ë¤ìì ìê°í Promise
ì
ëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4