π₯ νμ΅λͺ©ν
- μλ°μ€ν¬λ¦½νΈ DeepDive 12μ₯, 18μ₯, 26μ₯ νμ΅νκΈ°.
function add(x, y) {
return x+y;
}
var f = function add(x, y) {
return x+y;
};
// ν¨μλ ν¨μ μ΄λ¦(add)μΌλ‘ νΈμΆνλ κ²μ΄ μλλΌ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ(f)λ‘ νΈμΆνλ€.
let result = f(1, 3);
var add = new Fuction('x', 'y', 'return x+y');
Function μμ±μ ν¨μλ‘ ν¨μλ₯Ό νΈμΆνλ λ°©μμ μΌλ°μ μ΄μ§ μκ³ λ°λμ§νμ§ μλ€.
const add = (x, y) => { ... } // 맀κ°λ³μ μ¬λ¬ κ°
const add = x => {...} // 맀κ°λ³μ ν κ°
const add = () => {...} // 맀κ°λ³μ μμ
ν¨μ νΈμ΄μ€ν β λ³μ νΈμ΄μ€ν
var
ν€μλλ‘ μ μΈλ λ³μλundefined
λ‘ μ΄κΈ°ν λλ€.ν¨μ ννμ
μΌλ‘ μ μν ν¨μλ ν¨μ νΈμ΄μ€ν μ΄ μλλ³μ νΈμ΄μ€ν μ΄ λ°μ
νλ€.- λ³μ νΈμ΄μ€ν μ΄ λ°μνλ€λ 건, add()λ₯Ό ννμ μμμ νΈμΆνμ λ ν¨μλ₯Ό νΈμΆν κ² μλλΌ
λ³μλ₯Ό νΈμΆν κ² λλ κ²
μ΄λ€. => λ°λΌμTypeError: add is not function
μ μΆλ ₯νλ€.
- (
let
μΌλ‘ μ μΈν ν¨μ ννμμ λΉμ°ν νΈμ΄μ€ν μ λλ€.)- ν¨μ μ μΈλ¬Έμ ν΅ν΄ μ묡μ μΌλ‘ μμ± λ μλ³μλ ν¨μ κ°μ²΄λ‘ μ΄κΈ°νλλ€.
- ν¨μ νΈμ΄μ€ν μ ν¨μλ₯Ό νΈμΆνκΈ° μ μ λ°λμ ν¨μλ₯Ό μ μΈν΄μΌ νλ€λ λΉμ°ν κ·μΉμ 무μνλ€. => π΄ κ·Έλ¬λ―λ‘ ν¨μ ννμμ μ¬μ©ν κ²μ κΆμ₯.
undefined
λ€.μλ°μ€ν¬λ¦½νΈμ κ²½μ° ν¨μλ₯Ό μ μν λ μ μ ν μΈμκ° μ λ¬λμλμ§ νμΈν νμκ° μλ€.
function add(x, y) {
if(typeof x !== 'number' || typeof y !== 'number')
throw new TypeError('μΈμλ λͺ¨λ μ«μμ¬μΌ ν©λλ€.');
}
ES6μμ λμ λ 맀κ°λ³μ κΈ°λ³Έκ°μ μ¬μ©νλ©΄ μ΄κΈ°νλ₯Ό λ κ°μνν μ μλ€.
function add(a=0, b=0, c=0) { }
π #checkpoint.
- ν¨μλ ν κ°μ§ μΌλ§ ν΄μΌ νλ©° κ°κΈμ μ κ² λ§λ€μ΄μΌ νλ€.
- 맀κ°λ³μλ μ΅λ 3κ° μ΄μμ λμ§ μλ κ²μ κΆμ₯νλ€.
(function () {
var a=3;
var b=5;
return a*b;
}());
μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€.
μ¦μ μ€ν ν¨μ λ΄μ μ½λλ₯Ό λͺ¨μ λλ©΄ μ€λ³΅λλ λ³μλ ν¨μμ μΆ©λμ λ°©μ§ν μ μλ€.
μ μ λ³μ μμ±μ λ§μ λΌμ΄λΈλ¬λ¦¬ λ±μ λ§μ΄ μ¬μ© λλ€.
ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μ
ν¨μμ λ³νμ§ μλ κ³΅ν΅ λ‘μ§μ 미리 μ μν΄ λκ³ ,
κ²½μ°μ λ°λΌ λ³κ²½λλ λ‘μ§μ μΆμνν΄μ ν¨μ μΈλΆμμ ν¨μ λ΄λΆλ‘ μ λ¬νλ€.
var logAll = function (i) {
console.log(i);
};
var logOdds = function(i) {
if(i%2) console.log(i);
};
function repeat(n, func) {
for( nλ² λμ ) func(i);
}
func
: κ²½μ°μ λ°λΌ λ³κ²½λλ μΌlogAll
: μ λΆ μΆλ ₯νλ ν¨μlogOdds
: νμμΌ λλ§ μΆλ ₯νλ ν¨μμΈλΆ μνμ μμ‘΄νμ§ μλλ€.
μΈμμ λΆλ³μ± μ μ§
ν¨μμ μΈλΆ μνλ₯Ό λ³κ²½νμ§ μλλ€.
π #checkpoint.
ν¨μν νλ‘κ·Έλλ° : μμ ν¨μμ 보쑰 ν¨μμ μ‘°ν©μ ν΅ν΄ μΈλΆ μνλ₯Ό λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό μ΅μν ν΄μ λΆλ³μ±(immutability)μ μ§ν₯νλ νλ‘κ·Έλλ° ν¨λ¬λ€μ.
λ€μ μΈ κ°μ§ 쑰건μ κ°μ§λ©΄ μΌκΈ κ°μ²΄λ€.
- λ³μμ ν λΉ(assignment)ν μ μλ€.
- λ€λ₯Έ ν¨μμ μ λ¬μΈμ(argument)λ‘ μ λ¬λ μ μλ€.
- λ€λ₯Έ ν¨μμ κ²°κ³Όλ‘μ 리ν΄λ μ μλ€.
μ¦ κ°μ²΄λ₯Ό μΌλ° λ°μ΄ν°(string
, number
, boolean
, array
, object
)μ²λΌ λ€λ£° μ μλ€λ κ²μ΄λ€.
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ μΌκΈ κ°μ²΄λ€.
ν¨μκ° μΌκΈ κ°μ²΄λΌλ κ²μ, ν¨μλ₯Ό κ°μ²΄μ λμΌνκ² μ¬μ©ν μ μλ€λ λ»μ΄λ€. κ°μ²΄λ κ°μ΄λ―λ‘ ν¨μλ κ°κ³Ό λμΌνκ² μ·¨κΈν μ μλ€.
ν¨μλ κ°μ²΄λ€. κ·Έλ¬λ―λ‘ νλ‘νΌν°λ₯Ό κ°μ§ μ μλ€.
console.dir()
μ ν΅ν΄ λΈλΌμ°μ μ½μμμ ν¨μ κ°μ²΄μ λ΄λΆλ₯Ό λ€μ¬λ€ λ³Ό μ μλ€.
λ Έλμ νμν arguments, caller, length, name, prototype νλ‘νΌν°λ λͺ¨λ μΌλ° κ°μ²΄μλ μλ ν¨μ κ³ μ μ νλ‘νΌν°λ€.
arguments νλ‘νΌν°μ κ°μ arguments κ°μ²΄λ€.
arguments κ°μ²΄λ ν¨μ νΈμΆ μ μ λ¬λ μΈμ(argument)λ€μ μ 보λ₯Ό λ΄κ³ μλ μν κ°λ₯ν μ μ¬ λ°°μ΄ κ°μ²΄λ€.
μ μ¬ λ°°μ΄ κ°μ²΄λ?
length νλ‘νΌν°λ₯Ό κ°μ§ κ°μ²΄. for λ¬ΈμΌλ‘ μνν μ μλ κ°μ²΄λ₯Ό λ§νλ€.
callee
: arguments κ°μ²΄λ₯Ό μμ±ν ν¨μ, μ¦ ν¨μ μκΈ° μμ μ κ°λ¦¬ν¨λ€.length
: μΈμμ κ°μλ₯Ό κ°λ¦¬ν¨λ€.foo()
: μΌλ°μ μΈ ν¨μλ‘μ νΈμΆnew foo();
: μμ±μ ν¨μλ‘μ νΈμΆvar obj = {foo: foo}; obj.foo();
: λ©μλλ‘μ νΈμΆconst obj = {
x:1,
foo() { return this.x;} // λ©μλ
bar: function() {return this.x;} // λ°μΈλ© λ μΌλ° ν¨μ
const create = (id, content) => ({id, content}); // κ°μ²΄ 리ν°λ΄ λ°ν
const create = (id, content) => {return {id, content};}; // μμ κ°μ λ΄μ©, λ€λ₯Έ νκΈ°
[1,2,3].map(v=>v*2); // [2, 4, 6]
νμ΄ν ν¨μλ ν¨μ μ체μ this λ°μΈλ©μ κ°μ§ μλλ€.
νμ΄ν ν¨μκ° μ€μ²©λμ΄ μλ€λ©΄?
νλ‘νΌν°μ ν λΉν νμ΄ν ν¨μλ?
...
μ λΆμ¬μ μ μν 맀κ°λ³μ.function foo(param, ...rest){
console.log(param); // 1
console.log(rest); // [2, 3, 4, 5]
}
foo(1, 2, 3, 4, 5);
javaScript200μ κ΅μ¬ μ°Έκ³ - 35λ² μμ
μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€ννλ€κ° μλ¬κ° λ°μνλ©΄ κ·Έ μ¦μ μ€λ¨ λλ€.
μ΄λ₯Ό λλΉν΄μ μμΈ μ²λ¦¬λ λ°λμ νμνλ€.
κ°λ°μκ° μλν μλ¬μ λν μμΈ μ²λ¦¬. κ³ μλ‘ μλ¬λ₯Ό λ°μμμΌ μμΈ μν©μ μ리λ μν μ νλ€. throw λ¬Έμ΄ μ€νλλ©΄ μ€νλκ³ μλ λΈλ‘μ λΉ μ Έλκ°λ€.
function checkNumber(val) {
if(typeof val !== 'number') throw 'μ ν¨νμ§ μμ κ°μ
λλ€.';
console.log('νμΈλμμ΅λλ€.');
}
μ΄λ κ²°κ΅ μλ¬λ₯Ό λ°μμν€κ²μ΄λ―λ‘, νλ‘κ·Έλ¨μ΄ μ€λ¨λλ κ²μ λ§μ μ μλ€. μ΄ μλ¬ λ°μμ λν λμμ± μ΄ λ°λ‘ μλ try-catch-finally λ¬Έμ΄λ€.
μμμΉ λͺ»ν μλ¬μ κ°λ°μκ° μλν μλ¬ λͺ¨λ λμ κ°λ₯νλ€.
try
: ν΄λΉ λΈλ‘ μμμ λ°μλ μλ¬λ₯Ό μ‘μλΈλ€.catch
: try λΈλ‘μμ λ°μλ μλ¬ μ λ³΄κ° λ³μλ‘ μ λ¬ λλ€. μ μ΄κΆμ λκΈ΄λ€.finally
: μλ¬ λ°μ μ¬λΆμ μκ΄ μμ΄ μ€νλλ λΈλ‘try {
checkNumber(100);
checkNumber('Wrong type');
} catch (e) {
console.log(`μλ¬ λ°μ >> ${e}`);
} finally {
console.log('μλ£');
}