-
Notifications
You must be signed in to change notification settings - Fork 0
javascript_core
| Type | Value |
|---|---|
| Boolean | true, false |
| Number | ์ ์, ์ค์ |
| String | "๋ฌธ์์ด" |
| Null | null |
| Undefined | undefined |
์์ ํ์ ์ ์ค์ ๊ฐ์ ๋ณ์์ ์ ์ฅํ๋ค. ๋น๊ต์ ์ค์ ๊ฐ์ ๊ฐ์ง๊ณ ๋น๊ตํ๋ค. ๋ชจ๋ ์์ ํ์ ์ ๊ฐ์ ํํํ๋ ๋ฆฌํฐ๋ด ํ์์ด ์๋ค.
๋ฆฌํฐ๋ด : ์ฝ๋์ ์ง์ ์ ๋ ฅ๋ ๋ฌธ์์ด์ด๋ ์ซ์์ฒ๋ผ ๋ณ์์ ์ ์ฅ๋์ง ์์ ๊ฐ. ๊ฐ ์์ฒด
- Object
- Array
์ฐธ์กฐ ํ์ ์ ํ ๋น๋ ๋ณ์์ ๊ฐ์ ์ง์ ์ ์ฅํ์ง ์๋๋ค. ์ฐธ์กฐ ํ์ ์ ์ค์ ๊ฐ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค. ๋ชจ๋ ์ฐธ์กฐ ํ์ ๋ ๊ฐ์ ํํํ๋ ๋ฆฌํฐ๋ด ํ์์ด ์๋ค.
์์ : ์์ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ ๋น๊ต ๋ฐฉ์
์ฐธ์กฐ ํ์ ์ ์๋ก์ด ๋ณ์์ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณต์ฌ(Shallow Copy)์ ๊น์๋ณต์ฌ(Deep Copy) ๋ ๊ฐ์ง๊ฐ ์๋ค.
์์ ๋ณต์ฌ๋ 1-depth์ ํด๋นํ๋ ์์ฑ ๊ฐ๋ง ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ๋ผ์, ๋ด๋ถ ์์ฑ์ ์ฐธ์กฐ ํ์ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ธ๋ถ์์ ์ฐธ์กฐ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์๋ณธ ๋ณ์์ ์์ฑ๋ ๋ณ๊ฒฝ๋๋ค.
๊น์ ๋ณต์ฌ๋ ๋ชจ๋ ์์ฑ์ ๋ณต์ฌํ์ฌ ์๋ณธ๊ณผ ์์ ํ ๋ถ๋ฆฌ๋๋ ์์ ํ ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
์์ : ์ฐธ์กฐ ํ์ ์ ๋ณต์ฌ
- ํจ์ ์ ์ธ๋ฌธ ๋ฐฉ์ (function statement)
function add(x, y) { return x + y; }- ํจ์ ํํ์ ๋ฐฉ์ (function expression)
- ํจ์๋ ํ๋์ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ฏ๋ก ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
- ํํ์์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ํจ์ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๋๋ฐ, ์ด๋ฅผ ์ต๋ช ํจ์ ํํ์์ด๋ผ ํ๋ค.
var add = function (x, y) { return x + y; } // ํจ์ ๋ฆฌํฐ๋ด- Function() ์์ฑ์ ํจ์ ์ฌ์ฉ ๋ฐฉ์
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์
var add = new Function('x', 'y', 'return x + y');- ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์๋ ๊ฐ์ฒด๋ค. ๋ฐ๋ผ์ ์์ฑ(property)์ ์ถ๊ฐ/์ญ์ ํ ์ ์๋ค.
- ์ผ๋ฐ ๊ฐ์ฒด๋ ์๋์ ๊ฐ์ ๋์์ด ๊ฐ๋ฅํ๋ค.
- ๋ฆฌํฐ๋ด์ ์ํ ์์ฑ
- ๋ณ์๋ ๋ฐฐ์ด์ ์์, ๊ฐ์ฒด์ ํ๋กํผํฐ ๋ฑ์ ํ ๋น ๊ฐ๋ฅ
- ํจ์์ ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅ
- ํจ์์ ๋ฆฌํด๊ฐ์ผ๋ก ๋ฆฌํด ๊ฐ๋ฅ
- ๋์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์์ฑ ๋ฐ ํ ๋น ๊ธฐ๋ฅ
์ด ๊ฐ์ ํน์ง์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด(First Class) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
1๊ธ ๊ฐ์ฒด๋ ์์ ๋์ดํ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ง์กฑํ๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
1๊ธ ๊ฐ์ฒด(First class object)์ ์กฐ๊ฑด
- ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๋ด์ ์ ์๋ค.
- ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ํ ์ ์๋ค.
- ๋ฐํ๊ฐ(return value)์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ํ ๋น์ ์ฌ์ฉ๋ ์ด๋ฆ๊ณผ ๊ด๊ณ์์ด ๊ณ ์ ํ ๊ตฌ๋ณ์ด ๊ฐ๋ฅํ๋ค.
- ๋์ ์ผ๋ก ํ๋กํผํฐ ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
- ๋ณ์, ํ๋กํผํฐ์ ๊ฐ์ผ๋ก ํ ๋น
var foo = function () { return 100; }; // ๋ณ์์ ํ ๋น
var obj = {};
obj.baz = function() { return 200; }; // ํ๋กํผํฐ์ ํ ๋น- ํจ์ ์ธ์๋ก ์ ๋ฌ
var foo = function(func) { func(); };
foo(function() { console.log('bar'); });- ๋ฆฌํด๊ฐ์ผ๋ก ํ์ฉ
var foo = function() {
return function () {
console.log('this function is the return value');
};
};
var bar = foo();
bar();- ์ฝ๋ฐฑ ํจ์ ํจ์๋ฅผ ๋ฑ๋กํ๊ฑฐ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๋ฑ ํน์ ์์ ์ ๋๋ฌํ์๋ ํธ์ถ๋๋๋ก ํ๋ ํจ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํํ๋ก ์ฌ์ฉ
function doSomething(callback) {
// ...
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);์ฐธ์กฐ : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ฐฑ ํจ์ ์ดํดํ๊ธฐ
- ๋ด๋ถ(์ค์ฒฉ) ํจ์
ํจ์ ์ฝ๋ ๋ด๋ถ์ ๋ ๋ค์ ํจ์๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ํจ์
ํจ์ ๋ด๋ถ์์๋ง ์ง์ญ์ ์ผ๋ก ์ฌ์ฉ ํ๋ ๊ฒฝ์ฐ๋ ์ค๋ณต ์ฝ๋๋ฅผ ๋ด๋ถ์์ ์ฌ์ฌ์ฉํ ๋ ์ฌ์ฉ
function A(){
var a = "1";
function B(){
var b = "2";
}
}- ์ฆ์ ์คํ ํจ์ (IIFE:Immediately-invoked function expression)
ํจ์๋ฅผ ์ ์ํจ๊ณผ ๋์์ ์คํํ๋ ํจ์
์ต์ด์ ํ๋ฒ์ ์คํ๋ง์ ํ์๋ก ํ๋ ์ด๊ธฐํ ์ฝ๋ ๋ถ๋ถ์ ์ฌ์ฉ
๋ณ์๋ฅผ ์ ์ญ์ผ๋ก ์ ์ธํ๋๊ฒ์ ํผํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ์ ์ฌ์ฉ
// ๊ถ์ฅ (๋๊ธ๋ผ์ค ํด๋ฝํฌํธ)
(function() {
init();
}());
(function() {
init();
})();ํจ์์ ๋ฉ์๋๋ ์ผ๋ จ์ ๋์๊ณผ, ํํ๋ฐฉ์, ๊ตฌํ๋ ๋์ผํ๋ค.
ํ์ง๋ง ๋ฉ์๋๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋์์ด๋ค.
๋ฉ์๋๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ํด๋น ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ์ํ ๊ฐ๋ฅํ๋ค.
ํด๋์ค : ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํ ๋ฌธ๋ฒ
๊ฐ์ฒด(์ค์ฒดํ ๋๊ธฐ์ ) : ์ธ์คํด์ค(์ค์ฒดํ ๋ ํ)
๊ฐ์ฒด์ ์ธ์คํด์คํ : ๊ฐ์ฒด๋ฅผ ์ค์ ์ฌ์ฉ๊ฐ๋ฅํ๋๋ก ๋ง๋ฌ (new Object();)
๊ฐ์ฒด์ ์์ฑ / ํ๋กํผํฐ : ๋ฉค๋ฒ ํจ์(๋ฉ์๋), ๋ฉค๋ฒ ๋ณ์
ํธ์ด์คํ
์ ๋จ์ด ๋ป์ ๋ค์ด์ฌ๋ฆผ, ๋์ด์ฌ๋ฆผ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ปดํ์ผ ๊ณผ์ ์์ ๋ณ์์ ํจ์๋ฅผ ํธ์ด์คํ
(๋์ด์ฌ๋ฆผ) ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ํด์ํ ๋ ์ ํจ ๋ฒ์ ์์ ์ต์๋จ์ผ๋ก ๋ณ์ ์ ์ธ์ ๋์ด์ฌ๋ฆฐ๋ค. ์ ์ธ๋ฌธ์ ํญ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ต์ฐ์ ์ผ๋ก ํด์ํ๊ณ , ํ ๋น๋ฌธ์ ํ๋ก๊ทธ๋จ ๋์๊ณผ์ ์์ ์คํ ๋๋ค.
์ ์ธ(Declaration)๊ณผ ํ ๋น(Assignment)์ ์ดํดํด์ผ ํ๋ค.
function hoistingExam(){
console.log("value=" + value);
var value = 10;
console.log("value=" + value);
}
hoistingExam();
// ์คํ๊ฒฐ๊ณผ
// value = undefined // ๊ฐ์ด ์์์ ๋ํ๋ (์๋ฌ๊ฐ ๋์ง ์์)
// value = 10 function hoistingExam(){
var value; // ๋ณ์ ํธ์ด์คํ
(ํ ๋น์ด ์๋ ์ ์ธ๋ง ์ฌ๋ ค์ง๋ค)
console.log("value=" + value);
value = 10;
console.log("value=" + value);
}
hoistingExam();
// ์คํ๊ฒฐ๊ณผ
// value = undefined
// value = 10 var value = 30;
function hoistingExam(){
console.log("value=" + value);
var value = 10;
console.log("value=" + value);
}
hoistingExam();
// ์คํ๊ฒฐ๊ณผ
// value = undefined (ํจ์ ๋ด๋ถ์ ์ ์ธ๋์ด์ง value ๋ณ์๊ฐ ํธ์ด์คํ
๋๋ค)
// value = 10 ํจ์๋ ํจ์ ์ ์ธ๋ฌธ ๋ฐฉ์์ผ๋ก ์ ์ธ๋ ํจ์๋ง ์ ํจ ๋ฒ์ ์์ ์ต์๋จ์ผ๋ก ํจ์ ์ ์ธ์ ๋์ด์ฌ๋ฆฐ๋ค.
// ํจ์ ์ ์ธ๋ฌธ
hoistingExam(); // ์ ์ธ์ ์๋์ ์์ง๋ง ์ ์์ ์ผ๋ก ์คํ๋๋ค
function hoistingExam(){
var hoisting_val = 10;
console.log("hoisting_val ="+hoisting_val);
}
// ์คํ๊ฒฐ๊ณผ
// hoisting_val = 10 //ํจ์ ํํ์
hoistingExam2(); // ํธ์ด์คํ
์๋จ
var hoistingExam2 = function(){
var hoisting_val =10;
console.log("hoisting_val ="+hoisting_val);
}
// ์คํ๊ฒฐ๊ณผ (์๋ฌ)
// hoistingExam2 of object is not a function //Function ์์ฑ์
hoistingExam3(); // ํธ์ด์คํ
์๋จ
var hoistingExam3 = new Function("","return console.log('Ya-ho!!');");
// ์คํ๊ฒฐ๊ณผ (์๋ฌ)
// hoistingExam3 of object is not a function ํจ์ ํํ์๊ณผ Function ์์ฑ์๋ฅผ ์ด์ฉํ ํจ์ ์ ์๋ ๋ณ์์ ํจ์๋ฅผ ์ด๊ธฐํํ๋ ๋ฐฉ์์ด๋ฏ๋ก ์ ์ธ์ ํด๋นํ๋ ๋ณ์๋ ํธ์ด์คํ ๋์ง๋ง, ํ ๋น์ ํด๋นํ๋ ํจ์ ์ ์๋ถ๋ถ์ ํธ์ด์คํ ๋์ง ์๋๋ค.
console.log(fun); // undefined ๊ฐ์ด ์์์ ๋ํ๋ (์๋ฌ๊ฐ ๋์ง ์์)
var fun = function hello() { console.log('g'); };
console.log(fun); // function () ์ฐธ์กฐ : ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ
์ฐธ์กฐ : Javascript Scope์ ์ดํด - ํธ์ด์คํ
์คํ ๋ฌธ๋งฅ, ์ปจํ ์คํธ๋ก๋ ๋ถ๋ฆฐ๋ค. ์คํ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ํํ๊ณ ๊ตฌ๋ถํ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋๋ ํ๊ฒฝ์ด๋ผ๊ณ ํ ์ ์๋ค. ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๋ ์ ์ญ ์ฝ๋, eval() ์คํ, ํจ์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด ์คํ ์ปจํ ์คํธ๋ ์ฝ๋ ์คํ์ ํ์ํ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋๋ฐ ์ ๋ณด๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํจ์๋ฅผ ๋ปํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ผ์ข ์ ํธ์ถ ์คํ(Call Stack)์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด ๊ณณ์ ์คํ ์ปจํ ์คํธ๊ฐ ์์ธ๋ค. ์ด ํธ์ถ ์คํ์ ์ต์๋จ์ ์์นํ ์คํ ์ปจํ ์คํธ๊ฐ ํ์ฌ ์คํ๋๊ณ ์๋ ์คํ ์ปจํ ์คํธ๊ฐ ๋๋ ๊ฒ์ด๋ค.

์คํ ์ปจํ ์คํธ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ํ์ฑํ ๊ฐ์ฒด : ์คํ์ ํ์ํ ์ ๋ณด (arguments, ๋ณ์, ...)
- ์ ํจ ๋ฒ์ ์ ๋ณด : ํ์ฌ ์คํ ์ปจํ ์คํธ์ ์ ํจ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค.
- this ๊ฐ์ฒด : ํ์ฌ ์คํ ์ปจํ ์คํ ํฌํจํ๋ ๊ฐ์ฒด

์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ํจ์ abcFunction์ ์คํ ๊ตฌ๋ฌธ์์ ์์ ๊ฐ์ ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋๋ค.
์์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ฑํ ๊ฐ์ฒด ์์ฑ
- arguments ๊ฐ์ฒด ์์ฑ
- ์ ํจ๋ฒ์ ์ ๋ณด ์์ฑ
- ๋ณ์ ์์ฑ
- this ๊ฐ์ฒด ๋ฐ์ธ๋ฉ
- ์คํ
์ฐธ์กฐ : Javascript Scope์ ์ดํด - ์คํ ๋ฌธ๋งฅ
์ค์ฝํ๋ฅผ ์ง์ญํ๋ฉด ์์ญ, ๋ฒ์๋ผ๋ ๋ป์ด๋ค. ํ๋ก๊ทธ๋จ ์ธ์ด์์์ ์ ํจ๋ฒ์๋ ์ด๋ ๋ฒ์๊น์ง ์ฐธ์กฐํ๋์ง. ์ฆ, ๋ณ์์ ๋งค๊ฐ๋ณ์(parameter)์ ์ ๊ทผ์ฑ๊ณผ ์์กด๊ธฐ๊ฐ์ ๋ปํ๋ค.
์ฐธ์กฐ : ์ค์ฝํ์ ํด๋ก์
ํน์ ํจ์๊ฐ ์ฐธ์กฐํ๋ ๋ณ์๋ค์ด ์ ์ธ๋ ๋ ์์ปฌ ์ค์ฝํ(lexical scope : ์ ์ ์ ํจ ๋ฒ์/ ์ฆ, ์ ์๋ ํ๊ฒฝ)๋ ๊ณ์ ์ ์ง๋๋๋ฐ, ๊ทธ ํจ์์ ์ค์ฝํ๋ฅผ ๋ฌถ์ด์ ํด๋ก์ ๋ผ๊ณ ํ๋ค.
์ฐธ์กฐ : ์ค์ฝํ์ ํด๋ก์
Lexical Scoping์ ๋ค๋ฅธ ๋ง๋ก Static Scoping ์ด๋ผ๊ณ ๋ ํ๋ค. ํ ๋ณ์์ ์ค์ฝํ๊ฐ ๊ทธ ๋ณ์๊ฐ ์ ์๋ ๋ธ๋ญ ๋ด๋ถ์์๋ง ์ ํจํ ๋ณ์ ์ฐธ์กฐ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ํจ์๋ ์ค์ฝํ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ ํธ์ถ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ค. ํจ์ ํธ์ถ์์ ์ ํ ๋ถ๋ชจ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ global object์ธ window ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ๊ฐ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ํจ์ ํธ์ถ์ ๋ด๋ถ์ ์ผ๋ก๋ ๋ช ์์ ์ผ๋ก๋ call()/apply()๋ฅผ ์ด์ฉํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ํธ์ถ์์ ๋ชจ๋ this๋ someThing์ด๋ค.
์ผ๋ฐ ํจ์ ํธ์ถ์์๋ ๋ด๋ถ์ ์ผ๋ก call() ํจ์๊ฐ ํธ์ถ๋๋ค.
- someThing.someFunction(arg1, arg2, argN)
- someFunction.call(someThing, arg1, arg2, argN)
- someFunction.apply(someThing, [arg1, arg2, argN])
์์ : ์ค์ฒฉ ํจ์์์์ this
์์ : ์ฌ๋ฌ ์ํฉ์์์ this