๐ŸŸจ JavaScript

    [์ œ๋กœ์ดˆ] Promise์™€ ๋™๊ธฐ/๋น„๋™๊ธฐ ๊ด€๋ จ ์งค๋ง‰ ํ‚ค์›Œ๋“œ์ •๋ฆฌ

    https://sunshineyellow.tistory.com/64 ์œ„๋Š” ๊ฐ™์ด ๋ณผ๋งŒํ•œ ๋“œ๋ฆผ์ฝ”๋”ฉ ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ Promise ๊ธฐ์ดˆ ๊ฒŒ์‹œ๊ธ€. ์ œ๋กœ์ดˆ ์ธ๊ฐ„JS์—”์ง„ ๋ณด๋‹ค๊ฐ€ ์ถ”๊ฐ€์ ์ธ ํ‚ค์›Œ๋“œ ๋ฌธ์žฅ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด ์ž‘์„ฑํ•œ๋‹ค. Promise๋ž€? ์‹คํ–‰์€ ๋๋Š”๋ฐ!!! ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚˜์ค‘์— ์“ธ ์ˆ˜ ์žˆ๋‹ค. "์‹คํ–‰์€ ๋๋Š”๋ฐ"๊ฐ€ ์ค‘์š”. ๊ทธ๋ž˜์„œ new Promise ์•ˆ์˜ ์ต๋ช…ํ•จ์ˆ˜๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์ด ๋œ๋‹ค. ๋™๊ธฐ๋น„๋™๊ธฐ ์‹คํ–‰์ˆœ์„œ ๊ด€๋ จํ•ด์„œ ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ๊ธฐ์–ตํ•ด ๋†“์ž. let a = 2; const p = new Promise((resolve, reject) => { console.log('์‹คํ–‰1'); setTimeout(() => { a = 5; console.log('์‹คํ–‰3', a); resolve(a); }, 0); }); // ..

    JavaScript ์ •๋ฆฌ : this (2) ํ™”์‚ดํ‘œํ•จ์ˆ˜์—์„œ์˜ this

    ์—ฌ๊ธฐ์„œ ์ž ๊น๐Ÿ”” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ํŠน์ง• ์ƒ์„ฑ์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ ์Šค์Šค๋กœ์˜ this, argument๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์Œ returnํ•˜์ง€ ์•Š์•„๋„ ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ (๋ณธ๋ฌธ์ด ์—ฌ๋Ÿฌ ์ค„๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฒฝ์šฐ๋Š” ์ œ์™ธ) ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ this๋Š”? this = ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚ด (์ƒ์„ฑ๋  ๋•Œ this๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ, ํ™”์‚ดํ‘œํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ/ํ˜ธ์ถœ๋˜๋“  this๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.) const obj = { name: '์ฒ ์ˆ˜', sayName: function() { const innerMethod = () => { return `${this.name}, ์•ˆ๋…•!`; }; console.log(innerMethod()); } }; obj.sayName(); // ์ฒ ์ˆ˜, ์•ˆ๋…•! → ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•˜์ง€..

    JavaScript ์ •๋ฆฌ : this (1) ์ƒํ™ฉ๋ณ„ this

    JavaScript์—์„œ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋Š” ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ํ˜ธ์ถœ๋  ๋•Œ ๊ฒฐ์ •๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ this๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. (ํ™”์‚ดํ‘œํ•จ์ˆ˜์—์„œ์˜ this๋Š” ๋‹ค์Œ ๊ธ€์—์„œ ์ •๋ฆฌํ•œ๋‹ค.) ๋ชฉ์ฐจ ์ „์—ญ ์ปจํ…์ŠคํŠธ (Global scope) & ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ์ฒด์— ์†ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๊ฐ์ฒด์— ์†ํ•œ ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ (call, apply, bind) ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ ํด๋ž˜์Šค ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ "use strict" ๋ชจ๋“œ 1. ์ „์—ญ ์ปจํ…์ŠคํŠธ (Global scope) & ํ•จ์ˆ˜ ํ˜ธ์ถœ this = ์ „์—ญ ๊ฐ์ฒด (๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” window) console.log(this); // ์ „์—ญ ๊ฐ์ฒด (๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” window) function myFunction() { co..

    ๋ฌธ์ œํ•ด๊ฒฐ : hash๊ฐ’ ๋ฐ›์•„์„œ scroll ์กฐ์ •ํ•˜๊ธฐ

    ์ƒํ™ฉ A ํŽ˜์ด์ง€์—์„œ aํƒœ๊ทธ ์—ฌ๋Ÿฌ๊ฐœ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด์„œ ๋ˆ„๋ฅด๋ฉด BํŽ˜์ด์ง€์˜ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. (์—ฌ๊ธฐ์„œ AํŽ˜์ด์ง€์™€ BํŽ˜์ด์ง€๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ HTML์ด๋‹ค.) AํŽ˜์ด์ง€ ์ œ๋ชฉ1 ์ œ๋ชฉ2 ์ œ๋ชฉ3 ์ œ๋ชฉ4 ... BํŽ˜์ด์ง€ ์ปจํ…์ธ  ์ œ๋ชฉ 1 ์ปจํ…์ธ  ... ์ปจํ…์ธ  ์ œ๋ชฉ 2 ์ปจํ…์ธ  ... ์ปจํ…์ธ  ์ œ๋ชฉ 3 ์ปจํ…์ธ  ... ์ปจํ…์ธ  ์ œ๋ชฉ 4 ์ปจํ…์ธ  ... ์ปจํ…์ธ  ์ œ๋ชฉ 5 ์ปจํ…์ธ  ... ... ๋ฌธ์ œ ํ•ญ์ƒ ์ƒ๋‹จ์— css๊ฐ€ fixed๋กœ ๊ณ ์ •๋˜๋Š” header๊ฐ€ ์žˆ์–ด์„œ ๋งํฌ๋กœ ์ด๋™ํ–ˆ์„ ์‹œ ์›ํ•˜๋Š” ์ •ํ™•ํ•œ ์œ„์น˜์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณด์ด์ง€ ์•Š๊ณ  ์ค‘๊ฐ„๋ถ€ํ„ฐ ๋ณด์ด๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค. ์กฐ๊ฑด AํŽ˜์ด์ง€์—์„œ aํƒœ๊ทธ๋ฅผ ๋ˆ„๋ฅด๋ฉด BํŽ˜์ด์ง€์˜ ํ•ด๋‹น ํ•ด์‹œ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ h4๊ฐ€ header ๋ฐ”๋กœ ์•„๋ž˜ ์˜ค๋„๋ก ์Šคํฌ๋กค์ด ์ด๋™๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•ด๊ฒฐ BํŽ˜์ด์ง€์—์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ..

    ์ž๋™ํ™” : ํŒ์—… ๋†’์ด ๊ณ„์‚ฐํ•ด์„œ ์•„๋ž˜๋กœ ์Œ“๊ธฐ

    ์ƒํ™ฉ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ํŒ์—…์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ๋งˆ๋‹ค 1200px ์•„๋ž˜์˜ ํŒ์—… top๊ฐ’์„ ๊ทธ ์œ„ ํŒ์—…์˜ ๋†’์ด๊ฐ’๋งŒํผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ๋˜ ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์œ„์˜ ํ˜•ํƒœ์˜ ํŒ์—…์ด ์žˆ์œผ๋ฉฐ, ๊ฐ ํŒ์—…์€ absolute๋กœ ํ‘œ์‹œ๋œ๋‹ค. ํŒ์—… ID ๋ฒˆํ˜ธ๋Š” ์œ ์—ฐํ•˜๋ฉฐ, ID ๋ฒˆํ˜ธ๋Š” ํ•ญ์ƒ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค. (๊ด€๋ฆฌ์ž์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ง˜๋Œ€๋กœ ์จ๋„ฃ๋Š”๋‹ค) ๊ฐ ํŒ์—…์ด ๋ธŒ๋ผ์šฐ์ € ๋„ˆ๋น„ 1200px ์ดํ•˜๋กœ ๋–จ์–ด์ง€๋ฉด ์ฒซ ๋ฒˆ์งธ ํŒ์—…์ด ์œ„์—์„œ ์•„๋ž˜๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋œ๋‹ค. ํ•˜๋‹จ ๋ฐฐ์น˜๋Š” css top:npx๋กœ ์ œ์–ด๋˜๋ฉฐ, ์ฒซ ๋ฒˆ์งธ ํŒ์—…์€ top:60px๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ํŒ์—…์€ top:(์œ„์— ์žˆ๋Š” ํŒ์—…์˜ ๋†’์ด ๊ฐ’ + 20px)๋กœ ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ•œ๋‹ค. 1์ฐจ ํ•ด๊ฒฐ const popups = document.querySelectorAll('[id^="pop_..

    Level 3 : 9 ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฒ„ํŠผ ๊ตฌํ˜„ํ•˜๊ธฐ(localStorage, array, forEach, JSON)

    9. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ ์กฐ๊ฑด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด localStorage์— ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ƒํ’ˆ์ด๋ฆ„์ด ๋‹ด๊ธฐ๊ณ , cart.html์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ํ•ด๋‹น html์— ์ƒํ’ˆ์ด ๋ฟŒ๋ ค์ง€๋„๋ก ๋งŒ๋“ค๊ธฐ ํ’€์ด ์ƒํ’ˆ๋ฆฌ์ŠคํŠธ // ์—ฌ๋Ÿฌ๊ฐœ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฒ„ํŠผ๋“ค์„ buttonCarts ๋ณ€์ˆ˜๋กœ ์„ ์–ธ let buttonCarts = document.querySelectorAll('.btn-cart'); // buttonCarts ์•ˆ์˜ ๊ฐ๊ฐ์˜ buttonCart elements๋“ค์—๊ฒŒ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ buttonCarts.forEach(function(buttonCart){ // buttonCart๋ฅผ ํด๋ฆญํ•˜๋ฉด.. buttonCart.addEventListener('click', function(){ // localStorage์˜ cart๋ฅผ ke..