Input + Output = True
javascript ๊ธฐ๋ณธ ์ง์ ์ ๋ฆฌ ๋ณธ๋ฌธ
์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ์ง์
์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ์ง์์ ์์๋ณด์!
๋ชฉํ: ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ์๋ ์๋ฆฌ ์ดํดํ๊ธฐ
๐ JavaScript์ ์๋ฃํ๊ณผ JavaScript๋ง์ ํน์ฑ์?
[๋์จํ ํ์
(loosely typed)์ ๋์ (dynamic) ์ธ์ด]
*๋์จํ ํ์ : ํ์ ์์ด ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ
-์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์ ์ ์ธ : const, let
*๋์ ์ธ์ด
-์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์์๋ ์ด๋ ํ ํ์ ์ ๊ฐ๋ ๋์ ์ผ๋ก (์ฌ)ํ ๋น ๊ฐ๋ฅ.
let val = 42 // Number
val = "๋ฌธ์๋ก ๋ณ๊ฒฝ" // String
val = true // Boolean
[JavaScript ํ ๋ณํ]
*์ ๋ฌ๋๋ ๊ฐ์ ์๋์ ์ผ๋ก ์ํ๋ ํ์ ์ผ๋ก ๋ณํ ํด์ฃผ๋ ๊ฒ
let resultStr = "123";
console.log(typeof resultStr); // string
let resultNum = Number(resultStr); // ๋ฌธ์์ด "123"์ด ์ซ์ 123์ผ๋ก ๋ณํ๋ฉ๋๋ค.
console.log(typeof resultNum); // number
[==, ===]
*๋น๊ต ์ฐ์ฐ์ : ๋ณ์์ ๊ฐ์ ์ด๋ค ๊ฐ ๋๋ ๋ค๋ฅธ ๋ณ์์ ๋น๊ตํ ๋ ์ฌ์ฉ
- == : ๋๋ฑ ์ฐ์ฐ์, '๊ฐ๋ค'์ ์๋ฏธ/ ํ์ ๊ณผ ์๊ด ์์ด '๊ฐ'์ด ๊ฐ์ผ๋ฉด true
2022 == 2022 // true
2022 == '2022' // true
- === : ์ผ์น ์ฐ์ฐ์, '์๊ฒฉํ๊ฒ' ๊ฐ๋ค ์ ์๋ฏธ/ '๊ฐ'๊ณผ 'ํ์ '๊น์ง ๊ฐ์์ผ true
2022 === 2022 // true
2022 === '2022' // false -> [ ์ซ์ํ === ๋ฌธ์ํ -> false ]
[๋์จํ ํ์ (loosely typed)์ ๋์ (dynamic) ์ธ์ด์ ๋ฌธ์ ์ ๊ณผ ๋ณด์ ๋ฐฉ๋ฒ]
*๋ฌธ์ ์ : ๋ณ์์ ์์์น ๋ชปํ ํ์ ์ด ๋ค์ด์ ํ์ ์๋ฌ ๋ฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์
console.log(1+10)
> 11
console.log(1+'10') // ์ซ์ 1 + ๋ฌธ์ 10
> 110
*๋ณด์ ๋ฐฉ๋ฒ : ํ์ ์คํฌ๋ฆฝํธ(TypeScipt)์ ๊ฐ์ ๊ฐ๋ ฅํ ํ์ (๋ณ์ ์ ์ธ ์ ํ์ ๋ ์ ์ธ)์ ํ์ฅ ์ธ์ด์ ์ฌ์ฉ
//js = ์๋ฐ์คํฌ๋ฆฝํธ
//js
const result = 2022
//ํ์
์คํฌ๋ฆฝํธ - js์ ๋์จํ ํ์
์ ๋ณด์ํ๊ณ ์ ๋์จ js์ ํ์ฅ ์ธ์ด
const result : number = 2022
[undefined์ null์ ์ฐจ์ด ๋น๊ต]
*undefined : ๋ณ์ ์ ์ธ ํ ์๋ฌด๊ฒ๋ ์๋ ์ํ
*null : ๋ณ์ ์ ์ธ ํ null ์ด๋ผ๋ ๊ฐ์ด ์ฃผ์ด์ง ์ํ -> "๊ฐ์ด ์๊ฒ ํ ๊ฒ"
let obj1
obj1 // undefind
let obj2 = null
obj2 // null
๐ JavaScript ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ด๋ ?
[๊ธฐ๋ณธ(์์)ํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ]
*๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ฐจ์ด : ๊ธฐ๋ณธํ์๋ ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํ๊ณ , ์ฐธ์กฐํ์๋ ๊ฐ์ด ์ ์ฅ๋ ์ฃผ์๊ฐ์ ํ ๋น(์ฐธ์กฐ)ํจ
-๊ธฐ๋ณธ(์์)ํ ๋ฐ์ดํฐ : Number, String, Boolean, null, undefined ๊ฐ ์์ผ๋ฉฐ ES6 ์์๋ Symbol ๋ ์ถ๊ฐ ๋์์
-์ฐธ์กฐํ ๋ฐ์ดํฐ : ๋ํ์ ์ผ๋ก ๊ฐ์ฒด(Object)๊ฐ ์๊ณ , ๊ทธ ํ์์ ๋ฐฐ์ด(Array), ํจ์(Function), ์ ๊ทํํ์(RegExp) ๋ฑ์ด ์์ผ๋ฉฐ, ES6์์๋ Map, Set, WeakMap, WeakSet ๋ฑ๋ ์ถ๊ฐ ๋์์
// ์ฃผ์ ๊ฐ์ ์์๋ก ์ค์ ํจ
// ๊ธฐ๋ณธํ
let a = 2022;
let b = 2023;
// let a : 100 ์ด๋ผ๋ ์ฃผ์ (์ ์ฅ) ๊ณต๊ฐ์ ํ๋ณด → a๋ผ๋ ๋ณ์์ ๋งค์นญ
// a = 2022 : a๋ผ๋ ๋ณ์๋ฅผ ์ฐพ๊ณ → ๋งค์นญ๋ ์ฃผ์ ๊ฐ์ธ 100์ (view) ๊ณต๊ฐ์ 2022๋ฅผ ํ ๋น
// let b : 101 ์ด๋ผ๋ ์ฃผ์ (์ ์ฅ) ๊ณต๊ฐ์ ํ๋ณด → b๋ผ๋ ๋ณ์์ ๋งค์นญ
// b = 2023 : b๋ผ๋ ๋ณ์๋ฅผ ์ฐพ๊ณ → ๋งค์นญ๋ ์ฃผ์ ๊ฐ์ธ 101์ (view) ๊ณต๊ฐ์ 2023๋ฅผ ํ ๋น
// ์ฐธ์กฐํ
let obj = {
a : 1,
b : 'b'
};
let obj2 = obj;
obj2.a = 1000;
console.log(obj2.a); // 1000
console.log(obj.a); // 1000
// let obj : 100 ์ด๋ผ๋ ์ฃผ์ (์ ์ฅ) ๊ณต๊ฐ์ ํ๋ณด → obj ๋ผ๋ ๋ณ์์ ๋งค์นญ
// {ํ๋กํผํฐ, ๊ฐ} ์ด ๋ด๊ธธ 1000์ด๋ผ๋ ๊ณต๊ฐ์ ํ๋ณด {ํ๋กํผํฐ, ๊ฐ} ๋งค์นญ (obj์ฃผ์ 100์ 1000์ ๋งค์นญ)
// 1011์ด๋ผ๋ ๊ณต๊ฐ์ aํ๋กํผํฐ์ ๊ฐ์ ๋งค์นญ
// 1012๋ผ๋ ๊ณต๊ฐ์ bํ๋กํผํฐ์ ๊ฐ์ ๋งค์นญ
// > @100 : @1000 / @1000 : {a : @1011, b : @1012} / @1011 : 1 / @1012 : 'b' ์ ํํ
// ๋ณต์ฌ๋ obj2๋ 101์ ๊ณต๊ฐ์ obj2๋ฅผ ํ๋ณด ํ obj์ ๊ฐ์ด ์๋ 100์ ๊ฐ @1000์ 'ํ ๋น'
// @1000์ ํ๋กํผํฐ a์ ๋งค์นญ๋ @1011์ ๊ฐ 1์ 1000์ผ๋ก ๋ณ๊ฒฝ
// ๋ณต์ฌ๋ obj2์ a์ ์๋ณธ obj์ a์ ๊ฐ์ด ๋ชจ๋ ๋ณ๊ฒฝ ํ ์ถ๋ ฅ
[๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ]
*๋ถ๋ณ ๊ฐ์ฒด : ์ด๋ฏธ ํ ๋น๋ ๊ฐ์ฒด๊ฐ ๋ณํ์ง ์๋๋ค๋ ๋ป
-freeze()์ const๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
let person = {
name : 'kim'
}
person.name = 'lee'
console.log(person.name) // lee
// freze() ์ฌ์ฉ
let person = {
name : 'kim'
}
Object.freeze(person)
person.name = 'lee' // ๋ฌด์ ๋จ
console.log(person.name) // kim
// ํ์ง๋ง
let person = {
name : 'kim'
}
Object.freeze(person)
person = {
age : 15
}
console.log(person) // { age: 15 } > freeze๋ ๋๊ฒฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง๋ง ์ฌํ ๋น์ ๊ฐ๋ฅํ๋ค
// const์ ์กฐํฉํ๋ฉด ํด๊ฒฐ๋๋ค
const person = {
name : 'kim'
}
Object.freeze(person)
person.name = 'lee' // ๋ฌด์๋จ
person = {
age : 15
}
console.log(person) // TypeError: Assignment to constant variable.
[์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ]
*์์ ๋ณต์ฌ : ๊ฐ์ฒด์ '์ฐธ์กฐ' ๊ฐ('์ฃผ์' ๊ฐ)์ ๋ณต์ฌ
*๊น์ ๋ณต์ฌ : ๊ฐ์ฒด์ '์ค์ ' ๊ฐ์ ๋ณต์ฌ
// ๊น์ ๋ณต์ฌ > ๊ธฐ์กด ๊ฐ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค.
const a = 'a';
let b = 'b';
c = b
b = c
c = 'c'
console.log(a); // 'a';
console.log(b); // 'b';
console.log(c); // 'c'
// ์์ ๋ณต์ฌ > ๊ธฐ์กด ๊ฐ์ ์ํฅ์ ๋ผ์น๋ค
const a = {
one: 1,
two: 2,
};
let b = a;
b.one = 3;
console.log(a); // { one: 3, two: 2 }
console.log(b); // { one: 3, two: 2 }
๐ ํธ์ด์คํ
๊ณผ TDZ๋ ๋ฌด์์ผ๊น ?
[์ค์ฝํ, ํธ์ด์คํ
, TDZ]
*์ค์ฝํ: ๋ณ์์ ์ ๊ทผํ ์ ์๋ ๋ฒ์
-์ ์ญ ์ค์ฝํ : ํ์ผ ๋ด ์ด๋์๋ ์ฐธ์กฐ ๊ฐ๋ฅ
-์ง์ญ ์ค์ฝํ : ํด๋น ๋ธ๋ญ(ํจ์) ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
let scope = 'global' // ์ ์ญ ์ค์ฝํ
function func(){
let scope = 'local' // ์ง์ญ ์ค์ฝํ
console.log(scope)
}
func() // 'local'
console.log(scope) // 'global'
*ํธ์ด์คํ : ์ฝ๋ ์คํ ์ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ
function dog(result) {
console.log(`๊ฐ์์ง๋ ${result}`)
}
dog('๊ท์ฝ๋ค') // ๊ฐ์์ง๋ ๊ท์ฝ๋ค
// ํจ์๋ฅผ ๋จผ์ ์คํํด๋ ์ ์ ์๋
dog('๊ท์ฝ๋ค') // ๊ฐ์์ง๋ ๊ท์ฝ๋ค
function dog(result) {
console.log(`๊ฐ์์ง๋ ${result}`) // ๋ฏธ๋ฆฌ ํ ๋น
}
// ํจ์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ํจ์ ์ ์ธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ถํฐ ํ ๋น
[ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์์ ํธ์ด์คํ
๋ฐฉ์์ ์ฐจ์ด]
*ํจ์ ์ ์ธ๋ฌธ
function declaration(){
console.log('ํจ์ ์ ์ธ๋ฌธ')
}
declaration()
*ํจ์ ํํ์
const expression = function(){
console.log('ํจ์ ํํ์')
}
expression()
*ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์ ์ฐจ์ด : ํธ์ด์คํ ์ ์ฐจ์ด
-ํจ์ ์ ์ธ๋ฌธ : ํจ์ ์ ์ฒด๋ฅผ ํธ์ด์คํ
-ํจ์ ํํ์ : ๋ณ์์ ์ ์ธ๋ถ ํ ๋น๋ถ๋ฅผ ๋๋์ด์ ํธ์ด์คํ > ์ ์ธ๋ถ ๋จผ์ ํธ์ด์คํ
declaration() // 'ํจ์ ์ ์ธ๋ฌธ'
expression() // ReferenceError: Cannot access 'expression' before initialization
function declaration(){
console.log('ํจ์ ์ ์ธ๋ฌธ')
}
const expression = function(){
console.log('ํจ์ ํํ์')
}
// ์์ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค
function declaration(){ // ํจ์ ์ ์ธ๋ฌธ : ์ ์ฒด ํธ์ด์คํ
console.log('ํจ์ ์ ์ธ๋ฌธ')
}
const expression // ํจ์ ํํ์ : ๋ณ์๋ง ์ ์ธ
declaration() // ํจ์ ์ ์ธ๋ฌธ ์คํ :'ํจ์ ์ ์ธ๋ฌธ'
expression() // ReferenceError: Cannot access 'expression' before initialization
function(){ // ํจ์ ํํ์ : ํ ๋น๋ถ๋ ๊ทธ๋๋ก
console.log('ํจ์ ํํ์')
}
// ์ ์ ์๋ํ๋ ค๋ฉด
const expression = function(){
console.log('ํจ์ ํํ์')
}
declaration() // 'ํจ์ ์ ์ธ๋ฌธ'
expression() // 'ํจ์ ํํ์'
function declaration(){
console.log('ํจ์ ์ ์ธ๋ฌธ')
}
[let, const, var, function์ ์คํ ์๋ฆฌ]
*let, const, var
-var๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ / let, const๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
-var์ ํธ์ด์คํ ๊ฐ๋ฅ / let, const๋ ํธ์ด์คํ ์๋ฌ ๋ฐ์ (TDZ ์กด์ฌ)
-var๋ ์ด๋ฏธ ์ ์ธ๋ ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํด๋ ์๋ฌ๊ฐ ๋์ง ์์ง๋ง
let, const๋ ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์์ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด ์๋ฌ ๋ฐ์
-var, let์ ๋ณ์ ์ ์ธ์ ์ด๊ธฐ ๊ฐ์ ์ฃผ์ง ์์๋ ๋์ง๋ง const๋ ๋ฐ๋์ ์ด๊ธฐ๊ฐ์ ํ ๋นํด์ผ ํจ
-var, let์ ์ ์ธ ํ ๊ฐ ๋ณ๊ฒฝ(์ฌํ ๋น) ๊ฐ๋ฅ / const๋ ์ ์ธ๋ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ (๊ฐ์ฒด์์ ํ๋กํผํฐ ๋ณ๊ฒฝ๊น์ง ์ ํ์ ์๋)
// const ๊ฐ ๋ณ๊ฒฝ
const arr = ["a"]
const name = arr
console.log("name 1 : ", name) // name 1 : ['a']
arr.push("b")
console.log("name 2 : ", name) // name 2 : ['a', 'b']
/*
๋ฐฐ์ด, ๊ฐ์ฒด๋ ์ฐธ์กฐ ์๋ฃํ์ด๊ธฐ ๋๋ฌธ์ ์์๋ ์์ฑ์ ๋ณ๊ฒฝํด๋
๋ด์ฉ๋ง ๋ณ๊ฒฝ ๋๊ณ ํด๋น ์ฃผ์๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก
const๋ก ์ ์ธ๋์์ด๋ ์์, ์์ฑ์ ๋ณ๊ฒฝํ ์ ์๋ค.
*/
*function
-ํจ์ ์์ฑ > ๋ธ๋ผ์ฐ์ ์์ง์ด ํจ์์ ์ด๋ฆ (ex-function name(){})์ ์๋ณ์๋ก ์ ์ฅ > ํจ์ ๊ฐ์ฒด ์์ฑ ํ ์ฐธ์กฐ
> ํจ์ ์คํ ๊ตฌ๋ฌธ์์ name์ ๋ง๋๋ฉด ๊ฐ์ ๊ฐ์ ธ์ด > ๊ทธ ๋ค์ ๊ตฌ๋ฌธ์ด () ์ด๋ผ๋ฉด ์คํ
>๋ง์ฝ ์ค์ฝํ์์ ์๋ณ์๋ฅผ ๋ชป ์ฐพ์๋ค๋ฉด, ์ฐธ์กฐ ์๋ฌ(ReferenceError) ์ถ๋ ฅ
> ์๋ณ์๋ ์ฐพ์์ง๋ง ์คํํ ์ ์๋ ํ์ ์ด๋ผ๋ฉด ํ์ ์๋ฌ(TypeError) ์ถ๋ ฅ
not(); // ReferenceError: not is not defined
let name= 'kim';
name(); // TypeError: name is not a function
[์คํ ์ปจํ
์คํธ์ ์ฝ ์คํ]
*์คํ ์ปจํ ์คํธ : ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด
-Global Execution context
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ์ ์ฝ๋๋ฅผ ์คํํ ๋ ์ ์ญ ๊ณต๊ฐ ์์ฑ.
๊ทธ ๊ณผ์ ์์ ์ ์ญ ๊ฐ์ฒด์ธ Window Object (Node๋ Global) ์์ฑ ๋ฐ this๊ฐ Window ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฅดํด.
-Function Execution context
ํจ์๊ฐ ํธ์ถ ๋ ๋๋ง๋ค ํธ์ถ ๋ ํจ์๋ฅผ ์ํ ํจ์ ๊ณต๊ฐ ์์ฑ.
๋ชจ๋ ํจ์๋ ํธ์ถ๋๋ ์์ ์ ์์ ๋ง์ ํจ์ ๊ณต๊ฐ์ ๊ฐ์ง.
*์ฝ ์คํ (FIFO ์ ์ ์ ์ถ)
์คํ ์ปจํ ์คํธ๋ฅผ ์ฝ์คํ์ ์์์ฌ๋ฆฐ ํ ์คํํ์ฌ ์ฝ๋์ ํ๊ฒฝ๊ณผ ์์๋ฅผ ๋ณด์ฅํจ
let name = 'kim'
function b(){
console.log('B ์คํํฉ๋๋ค')
}
function a(){
console.log('a ์คํํฉ๋๋ค')
b()
}
a()
// a ์คํํฉ๋๋ค
// B ์คํํฉ๋๋ค
>[global context]
>[global context][a์คํ ์ปจํ
์คํธ]
>[global context][a์คํ ์ปจํ
์คํธ][b์คํ ์ปจํ
์คํธ]
>[global context][a์คํ ์ปจํ
์คํธ]
>[global context]
[์ค์ฝํ ์ฒด์ธ, ๋ณ์ ์๋ํ]
*์ค์ฝํ ์ฒด์ธ : ์ค์ฝํ๋ฅผ ์ฐพ์๊ฐ๋ ๊ณผ์
const myName = 'kim'
function first() {
const age = 20
function second() {
const job = 'developer'
console.log(`hi, I'm ${myName}. I'm a ${age}-old ${job}`)
// Hi, I'm Serzhul. I'm a 30-old developer
}
second()
}
first()
// second ํจ์์์ myName ๋ณ์๋ฅผ ์ฐพ๋ ๊ณผ์
// ํจ์ ๋ด๋ถ์์ ํ์ > ์์ first ํจ์ ์ค์ฝํ์์ ํ์ > ๊ทธ ์์ '์ ์ญ' ์ค์ฝํ์์ ํ์
*๋ณ์ ์๋ํ : ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉด ์ ๋๋ ๋ณ์์ ๋ํ ์ ๊ทผ์ ๋ง๋ ๊ฒ
// ์ฆ์ ์คํ ํจ์๋ฅผ ํตํ ์๋ํ
(function () {
let a = 'a';
})();
console.log(a); // a is not defined
// ํด๋ก์ ์์ฑ์ ํตํ ์๋ํ > _name ์๋ํ
function welcome(name) {
let _name = name;
return function () {
console.log('welcome, ' + _name);
};
}
let a = new welcome('kim');
let b = new welcome('lee');
a._name ="์ด๋ฆ ๋ณ๊ฒฝ ์๋" // ReferenceError: Cannot access 'a' before initialization
a() // welcome, kim
b() // welcome, lee
ํด ๋๋์ด ์ ๋ฆฌ ๋!๐
์ถ๊ฐ ํฌ์คํ
์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ๊ณผ TDZ
๐ ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ๊ณผ TDZ โ ํธ์ด์คํ ํธ์ด์คํ (Hoisting) ์ฝ๋ ์คํ ์ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ. ์ฝ๋์์ ์ ์ธ๋ ์์น์ ์๊ด์์ด ๋ณ์ ๋ฐ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค
iotrue.tistory.com
'๐จFrontEnd > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ์ผํญ์ฐ์ฐ์ ์ดํญ์ฐ์ฐ์(๋จ์ถํ๊ฐ) (0) | 2023.01.29 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์๋ฆฌ - ์ฑ๊ธ์ค๋ ๋ ๋น๋๊ธฐ (0) | 2023.01.05 |
์ต์ ๋ ์ฒด์ด๋์ด๋?. javascript optional chaining ?. (0) | 2023.01.04 |
๋งค๊ฐ๋ณ์์ ์ธ์ (parameter and argument) ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด (String) (0) | 2022.12.07 |
javascript ajax ๊ธฐ๋ณธ ์ฝ๋ (0) | 2022.11.26 |