SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Startup JavaScript
6.Function, Scope, Closure
THINKER TO MAKER
x
사용자 정의 처리 방식
THINKER TO MAKER
Function
Function 객체
주어진 입력(Parameter)를 처리하여 그 결과를 돌려주는 구조가 함수.
기본 함수가 있지만, 개발자가 자기 스스로 함수를 정의할 수 있음
etc...
etc...
인수
함수가 동작하기 위한 인자 값
함수
미리 정의한 처리 방식
반환 값
함수에 의한 처리의 결과
function 명령으로 정의 하기 (선언적 방식)
Function 생성자를 이용하여 정의 하기
함수 리터럴 표현으로 정의하기 (익명 함수)
함수 선언
3 가지 방식
Function 선언
var triangle1 = new
Function('h','w','return h * w / 2');
console.log('Triangle 1 : ' +
triangle1(5,2));
var param = 'h, w';
var formula = 'return h * w / 2';
var diamond = new Function(param,
formula);
console.log('Diamond : ' +
diamond(5,2));
// function literal
var triangle2 = function(w, h){
return w * h / 2;
}
console.log('Triangle2 : ' +
triangle2(5,2));
함수는 데이터 형의 일종, 수치/문자로 전환 가능하며, 변수처럼 호출 가능 함.
function 선언과 변수 로서의 function 선언은 호출 시점이 다르므로 유의.
여러 개의 인수를 콤마로 구분
함수 내부에서만 참조 가능
Function 의 생성자를 이용하여 정의
거의 활용되지 않음
Function 명령으로 정의
Function 생성자 경유로 정의
JavaScript 에서는 함수도 데이터 형의 일종 임
함수를 변수에 대입하거나, 함수의 인수로 건네거나,
반환 값으로 함수를 주는 것이 가능
함수 리터럴 표현으로 정의
Function 활용
var triangle1 = function(w, h){
return
w * h /2;
}
console.log('Triangle1 : ' +
triangle1(5,2));
var triangle2 = function(w, h){
return w * h /2;
}
console.log('Triangle2_1 : ' +
triangle2(5,2));
console.log(triangle2);
JavaScript 의 함수 정의는 간단하나, 코딩 시 생각 치 못한 문제 발생 가능
함수 정의라 하더라도 기법에 따라 해석이 다르므로 주의
triangle2 = 10;
console.log('Triangle2_2 : ' +
triangle2);
// static function
console.log('Triangle3 : ' +
triangle3(5,2)); // working
function triangle3(w, h){
return w * h / 2;
}
console.log('Triangle 4 : ' +
triangle4(5,2)); // not working
var triangle4 = function(w, h){
return w * h /2;
}
Function 고급
// named argument
function triangle(args){
if(args.base == undefined){
args.base = 1;
}
if(args.height == undefined){
args.height = 1;
}
return args.base * args.height / 2;
}
console.log('Triangle1 :' +
triangle({ base : 10, height : 5}));
// Higher order function
function arrayWalk(data, func){
for(var key in data){
func(key, data[key]);
}
}
function showElement(key, value){
console.log(key + ' : ' + value);
}
var arr = [1, 2, 4, 8, 16];
arrayWalk(arr, showElement);
// anonymous function
arrayWalk(arr, function(key, value){
console.log(key + ' : ' + value);
});
함수도 데이터 형이므로 함수를 인수/반환 값으로 사용 가능 (고계 함수)
일회용 함수는 이름을 부여하기 보다는 익명 함수를 이용하여 코드를 작성
변수와 함수의 범위
THINKER TO MAKER
Scope
Scope
Scope는 변수가 어느 장소에서 참조할 수 있는가를 결정하는 개념.
전체 참조 가능한 Global Scope, 함수 안만 가능한 Local Scope 로 나뉨.
var scope1 = 'Global Var1';
function getValue1(){ // undefined
console.log(scope1);
var scope1 = 'Local Var1';
return scope1;
}
console.log(getValue1()); // Local Var1
console.log(scope1); // Global Var1
var scope2 = 'Global Var2';
function getValue2(){
scope2 = 'Local Var2';
return scope2;
}
console.log(getValue2()); // Local Var2
console.log(scope2); // Local Var2
스크립트 전체에서 참조할 있는 Scope
정의된 함수 안에서만 참조할 수 있는 Scope
Global Scope
Local Scope
var 를 사용하지 않으면 모두 글로벌 변수로 취급됨.
로컬 변수를 정의하려면 반드시 var 사용
로컬 변수는 함수 전체 영역에서 유효함. 직관 유효
범위, 실제 범위가 어긋날 수 있으므로 선두에 선언
변수 선언에 var 필수
로컬 변수는 함수 선두에
Scope
가인수는 기본적으로 로컬 변수로 처리. Value 형 인수 값은 함수 내 변경이
일어나도 글로벌 변수 값에 영향이 없으나, 참조 형인 경우, 영향을 주게 됨.
var value1 = 100;
function decrementValue(value){
value--;
return value;
}
console.log(decrementValue(value1)); //
99
console.log(value1); //
100
var value2 = [1, 2, 4, 8, 10];
function deleteElement(value){
value.pop();
}
console.log(deleteElement(value2));
console.log(value2); //
[1,2,4,8]
Value 형
10
Global 변수 Local 변수
Global 실제 값 Local
Reference 형
10
100
100
200
200
200
200
200
[1, 2, 4, 8, 16]
200
[1, 2, 4, 8]
Scope
Java, C 와는 달리, 블록 레벨의 Scope 는 지원하지 않음.
리터럴 선언은 Local 이지만, Function 생성자 선언 시 Global 변수로 취급.
// not support block level scope
if(true){
console.log('True 1');
var i = 5;
}
console.log(i); // 5
// support function level scope
(function(){
if(true){
console.log('True 2');
var j = 0;
}
})();
console.log(j);
// difference between function
var scope = 'Global Var';
function checkScope(){
var scope = 'Local Var';
var func1 = function(){
return scope;
}
console.log(func1()); // Local
Scope
var func2 = new Function('return
scope;');
console.log(func2()); // Global
Scope
}
checkScope();
Scope Chain
Scope Chain 의 선두에 위치하고 있는 객체로 부터 순서대로 Property 검색.
매치하는 Property가 처음 발견된 곳에서 그 값을 채택 함
var x = 'Global';
function outerFunc(){
var y = 'Local Outer';
function innerFunc(){
var z = 'Local Inner';
console.log(z);
console.log(y);
console.log(x);
}
innerFunc();
}
outerFunc();
functon ???(){
}
Call 객체
functon ???(){
}
Call 객체
Global 객체
스크립트 전체
함수 내부
중첩된 함수 내부
Scope 단위로 Global 객체, Call 객체 생성.
이것들을 생성 순서대로 연결한 것이 Scope Chain 임
JS 의 특징
THINKER TO MAKER
Parameter & Closure
Parameter
인수가 함수 측에서 요구하는 수와 다른 경우에도 파라미터 수 체크하지 않음.
인수 개수를 자유롭게 변경할 수 있으며, callee 를 이용하여 재귀호출 가능
function showMessage(args){
console.log(arguments);
console.log(arguments.length
+ ' / ' + args);
}
showMessage();
showMessage('Tomato','Banana');
function paramTest(){
for(var i =0 ; i
< arguments.length ; i++){
console.log(arguments[i]);
}
}
paramTest('a',1, [10,20,30]);
function factorial(n){
if(n != 0){
return n *
arguments.callee(n - 1);
}
return 1;
}
console.log(factorial(3));
Closure
Closure 는 로컬 변수를 참조하고 있는 함수 내의 함수.
일종의 기억 영역을 제공해주는 구조를 가지고 있음
var myClosure
= closure(1);
function closure(init){
var counter = init;
return function(){
return ++counter;
}
}
변수 counter는 1
function(){
return ++counter;
}
myClosure(); 2
myClosure(); 3
myClosure(); 4
반환 값 함수 Literal
가인수 init 에 1세트
로컬 변수 counter
변환값인 함수 Literal을 경유
하여 로컬 변수를 참조, 조작
할 수 있다.
내부적으로 참조하고 있는
로컬변수 counter도 함께 남
아있다. -> 데이터의 보존장
소(기억 영역)를 지닌 함수가
만들 어 짐
var myClosure1
= closure(1);
function closure(init){
var counter = init;
return function(){
return ++counter;
}
}
글로벌 객체
myClosure1
myClosure2
var myClosure2
= closure(100);
Call 1-1
Call 1-2
Call 1-1
Call 1-2
counter=1 counter=100
함수 리터럴
(Closure)
함수 리터럴
(Closure)
Closure 실습
호출마다 생성된 Call 객체는 별개의 것으로, 각각의 Call 객체에 속한 로컬
변수 Counter 도 별개의 것이 됨. 각각의 Scope 체인은 독립된 공간 임.
function closure(val){
var count = val;
return function(){
return ++count;
}
}
var cls1 = closure(1);
console.log(cls1());
console.log(cls1());
var cls2 = closure(100);
console.log(cls2());
console.log(cls2());
클로저 (Closure) 객체 (Object)
클로저를 감싸고 있는 부모 함수 생성자
클로저로 부터 참조되는 로컬 변수 프로퍼티
클로저 자신 메소드
클로저 리턴 함수 호출 인스턴스화
클로저를 대입하는 변수 인스턴스
익명 함수를 나타내는 Call 객체
Closure 호출 시 생성
Closure 함수의 Call 객체
글로벌 객체
W www.circul.us G group.circul.us
S social.circul.us C cafe.circul.us
CONTACT.US circulus@circul.us
THINKER TO MAKER
ANY
QUESTION?
x

Weitere ähnliche Inhalte

Was ist angesagt?

[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍Hyunsoo Jung
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js functionYoung-Beom Rhee
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple OverviewKim Hunmin
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)NAVER D2
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorYoung-Beom Rhee
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
C++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threadsC++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threadsSeok-joon Yun
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 

Was ist angesagt? (20)

[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple Overview
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operator
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
6 function
6 function6 function
6 function
 
iOS 메모리관리
iOS 메모리관리iOS 메모리관리
iOS 메모리관리
 
C++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threadsC++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threads
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 

Andere mochten auch

Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Circulus
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초Circulus
 
Startup JavaScript 10 - OpenAPI & RSS 활용
Startup JavaScript 10 - OpenAPI & RSS 활용Startup JavaScript 10 - OpenAPI & RSS 활용
Startup JavaScript 10 - OpenAPI & RSS 활용Circulus
 
Personal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualPersonal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualCirculus
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Circulus
 
123D Design - 컵 만들기
123D Design - 컵 만들기123D Design - 컵 만들기
123D Design - 컵 만들기Circulus
 
Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Circulus
 
123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기Circulus
 
123D Design - 화분 만들기
123D Design - 화분 만들기123D Design - 화분 만들기
123D Design - 화분 만들기Circulus
 
123D Design - 정리함 만들기
123D Design - 정리함 만들기123D Design - 정리함 만들기
123D Design - 정리함 만들기Circulus
 
Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Circulus
 
123D Design - 모델링 기초
123D Design - 모델링 기초123D Design - 모델링 기초
123D Design - 모델링 기초Circulus
 
Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Circulus
 

Andere mochten auch (14)

Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
 
Startup JavaScript 10 - OpenAPI & RSS 활용
Startup JavaScript 10 - OpenAPI & RSS 활용Startup JavaScript 10 - OpenAPI & RSS 활용
Startup JavaScript 10 - OpenAPI & RSS 활용
 
Personal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualPersonal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manual
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링
 
123D Design - 컵 만들기
123D Design - 컵 만들기123D Design - 컵 만들기
123D Design - 컵 만들기
 
Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기
 
123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기
 
123D Design - 화분 만들기
123D Design - 화분 만들기123D Design - 화분 만들기
123D Design - 화분 만들기
 
123D Design - 정리함 만들기
123D Design - 정리함 만들기123D Design - 정리함 만들기
123D Design - 정리함 만들기
 
Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기
 
123D Design - 모델링 기초
123D Design - 모델링 기초123D Design - 모델링 기초
123D Design - 모델링 기초
 
Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅
 

Ähnlich wie Startup JavaScript 6 - 함수, 스코프, 클로저

헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
[ES6] 10. Generator
[ES6] 10. Generator[ES6] 10. Generator
[ES6] 10. GeneratorHan JaeYeab
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 
Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수Jaehoon Lee
 
EcmaScript6(2015) Overview
EcmaScript6(2015) OverviewEcmaScript6(2015) Overview
EcmaScript6(2015) Overviewyongwoo Jeon
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Ji Hun Kim
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bindJinhyuck Kim
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] FunctionsBill Kim
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crowJaeseung Ha
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Ji Ung Lee
 

Ähnlich wie Startup JavaScript 6 - 함수, 스코프, 클로저 (20)

헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
[ES6] 10. Generator
[ES6] 10. Generator[ES6] 10. Generator
[ES6] 10. Generator
 
06장 함수
06장 함수06장 함수
06장 함수
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수
 
EcmaScript6(2015) Overview
EcmaScript6(2015) OverviewEcmaScript6(2015) Overview
EcmaScript6(2015) Overview
 
Javascript
JavascriptJavascript
Javascript
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bind
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] Functions
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Refactoring - Chapter 8.2
Refactoring - Chapter 8.2
 
W14 chap13
W14 chap13W14 chap13
W14 chap13
 
자바스크립트 클래스의 프로토타입(prototype of class)
자바스크립트 클래스의  프로토타입(prototype of class)자바스크립트 클래스의  프로토타입(prototype of class)
자바스크립트 클래스의 프로토타입(prototype of class)
 

Mehr von Circulus

라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoTCirculus
 
라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강Circulus
 
123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링Circulus
 
JavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotJavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotCirculus
 
piBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtpiBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtCirculus
 
웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇Circulus
 
라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드Circulus
 
라즈베리파이로 IoT 시작하기 복습
라즈베리파이로 IoT 시작하기 복습라즈베리파이로 IoT 시작하기 복습
라즈베리파이로 IoT 시작하기 복습Circulus
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기Circulus
 
라즈베라파이란 무엇인가?
라즈베라파이란 무엇인가?라즈베라파이란 무엇인가?
라즈베라파이란 무엇인가?Circulus
 

Mehr von Circulus (10)

라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
 
라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강
 
123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링
 
JavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotJavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and Robot
 
piBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtpiBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOt
 
웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇
 
라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드
 
라즈베리파이로 IoT 시작하기 복습
라즈베리파이로 IoT 시작하기 복습라즈베리파이로 IoT 시작하기 복습
라즈베리파이로 IoT 시작하기 복습
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기
 
라즈베라파이란 무엇인가?
라즈베라파이란 무엇인가?라즈베라파이란 무엇인가?
라즈베라파이란 무엇인가?
 

Kürzlich hochgeladen

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 

Kürzlich hochgeladen (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 

Startup JavaScript 6 - 함수, 스코프, 클로저

  • 1. Startup JavaScript 6.Function, Scope, Closure THINKER TO MAKER x
  • 2. 사용자 정의 처리 방식 THINKER TO MAKER Function
  • 3. Function 객체 주어진 입력(Parameter)를 처리하여 그 결과를 돌려주는 구조가 함수. 기본 함수가 있지만, 개발자가 자기 스스로 함수를 정의할 수 있음 etc... etc... 인수 함수가 동작하기 위한 인자 값 함수 미리 정의한 처리 방식 반환 값 함수에 의한 처리의 결과 function 명령으로 정의 하기 (선언적 방식) Function 생성자를 이용하여 정의 하기 함수 리터럴 표현으로 정의하기 (익명 함수) 함수 선언 3 가지 방식
  • 4. Function 선언 var triangle1 = new Function('h','w','return h * w / 2'); console.log('Triangle 1 : ' + triangle1(5,2)); var param = 'h, w'; var formula = 'return h * w / 2'; var diamond = new Function(param, formula); console.log('Diamond : ' + diamond(5,2)); // function literal var triangle2 = function(w, h){ return w * h / 2; } console.log('Triangle2 : ' + triangle2(5,2)); 함수는 데이터 형의 일종, 수치/문자로 전환 가능하며, 변수처럼 호출 가능 함. function 선언과 변수 로서의 function 선언은 호출 시점이 다르므로 유의. 여러 개의 인수를 콤마로 구분 함수 내부에서만 참조 가능 Function 의 생성자를 이용하여 정의 거의 활용되지 않음 Function 명령으로 정의 Function 생성자 경유로 정의 JavaScript 에서는 함수도 데이터 형의 일종 임 함수를 변수에 대입하거나, 함수의 인수로 건네거나, 반환 값으로 함수를 주는 것이 가능 함수 리터럴 표현으로 정의
  • 5. Function 활용 var triangle1 = function(w, h){ return w * h /2; } console.log('Triangle1 : ' + triangle1(5,2)); var triangle2 = function(w, h){ return w * h /2; } console.log('Triangle2_1 : ' + triangle2(5,2)); console.log(triangle2); JavaScript 의 함수 정의는 간단하나, 코딩 시 생각 치 못한 문제 발생 가능 함수 정의라 하더라도 기법에 따라 해석이 다르므로 주의 triangle2 = 10; console.log('Triangle2_2 : ' + triangle2); // static function console.log('Triangle3 : ' + triangle3(5,2)); // working function triangle3(w, h){ return w * h / 2; } console.log('Triangle 4 : ' + triangle4(5,2)); // not working var triangle4 = function(w, h){ return w * h /2; }
  • 6. Function 고급 // named argument function triangle(args){ if(args.base == undefined){ args.base = 1; } if(args.height == undefined){ args.height = 1; } return args.base * args.height / 2; } console.log('Triangle1 :' + triangle({ base : 10, height : 5})); // Higher order function function arrayWalk(data, func){ for(var key in data){ func(key, data[key]); } } function showElement(key, value){ console.log(key + ' : ' + value); } var arr = [1, 2, 4, 8, 16]; arrayWalk(arr, showElement); // anonymous function arrayWalk(arr, function(key, value){ console.log(key + ' : ' + value); }); 함수도 데이터 형이므로 함수를 인수/반환 값으로 사용 가능 (고계 함수) 일회용 함수는 이름을 부여하기 보다는 익명 함수를 이용하여 코드를 작성
  • 8. Scope Scope는 변수가 어느 장소에서 참조할 수 있는가를 결정하는 개념. 전체 참조 가능한 Global Scope, 함수 안만 가능한 Local Scope 로 나뉨. var scope1 = 'Global Var1'; function getValue1(){ // undefined console.log(scope1); var scope1 = 'Local Var1'; return scope1; } console.log(getValue1()); // Local Var1 console.log(scope1); // Global Var1 var scope2 = 'Global Var2'; function getValue2(){ scope2 = 'Local Var2'; return scope2; } console.log(getValue2()); // Local Var2 console.log(scope2); // Local Var2 스크립트 전체에서 참조할 있는 Scope 정의된 함수 안에서만 참조할 수 있는 Scope Global Scope Local Scope var 를 사용하지 않으면 모두 글로벌 변수로 취급됨. 로컬 변수를 정의하려면 반드시 var 사용 로컬 변수는 함수 전체 영역에서 유효함. 직관 유효 범위, 실제 범위가 어긋날 수 있으므로 선두에 선언 변수 선언에 var 필수 로컬 변수는 함수 선두에
  • 9. Scope 가인수는 기본적으로 로컬 변수로 처리. Value 형 인수 값은 함수 내 변경이 일어나도 글로벌 변수 값에 영향이 없으나, 참조 형인 경우, 영향을 주게 됨. var value1 = 100; function decrementValue(value){ value--; return value; } console.log(decrementValue(value1)); // 99 console.log(value1); // 100 var value2 = [1, 2, 4, 8, 10]; function deleteElement(value){ value.pop(); } console.log(deleteElement(value2)); console.log(value2); // [1,2,4,8] Value 형 10 Global 변수 Local 변수 Global 실제 값 Local Reference 형 10 100 100 200 200 200 200 200 [1, 2, 4, 8, 16] 200 [1, 2, 4, 8]
  • 10. Scope Java, C 와는 달리, 블록 레벨의 Scope 는 지원하지 않음. 리터럴 선언은 Local 이지만, Function 생성자 선언 시 Global 변수로 취급. // not support block level scope if(true){ console.log('True 1'); var i = 5; } console.log(i); // 5 // support function level scope (function(){ if(true){ console.log('True 2'); var j = 0; } })(); console.log(j); // difference between function var scope = 'Global Var'; function checkScope(){ var scope = 'Local Var'; var func1 = function(){ return scope; } console.log(func1()); // Local Scope var func2 = new Function('return scope;'); console.log(func2()); // Global Scope } checkScope();
  • 11. Scope Chain Scope Chain 의 선두에 위치하고 있는 객체로 부터 순서대로 Property 검색. 매치하는 Property가 처음 발견된 곳에서 그 값을 채택 함 var x = 'Global'; function outerFunc(){ var y = 'Local Outer'; function innerFunc(){ var z = 'Local Inner'; console.log(z); console.log(y); console.log(x); } innerFunc(); } outerFunc(); functon ???(){ } Call 객체 functon ???(){ } Call 객체 Global 객체 스크립트 전체 함수 내부 중첩된 함수 내부 Scope 단위로 Global 객체, Call 객체 생성. 이것들을 생성 순서대로 연결한 것이 Scope Chain 임
  • 12. JS 의 특징 THINKER TO MAKER Parameter & Closure
  • 13. Parameter 인수가 함수 측에서 요구하는 수와 다른 경우에도 파라미터 수 체크하지 않음. 인수 개수를 자유롭게 변경할 수 있으며, callee 를 이용하여 재귀호출 가능 function showMessage(args){ console.log(arguments); console.log(arguments.length + ' / ' + args); } showMessage(); showMessage('Tomato','Banana'); function paramTest(){ for(var i =0 ; i < arguments.length ; i++){ console.log(arguments[i]); } } paramTest('a',1, [10,20,30]); function factorial(n){ if(n != 0){ return n * arguments.callee(n - 1); } return 1; } console.log(factorial(3));
  • 14. Closure Closure 는 로컬 변수를 참조하고 있는 함수 내의 함수. 일종의 기억 영역을 제공해주는 구조를 가지고 있음 var myClosure = closure(1); function closure(init){ var counter = init; return function(){ return ++counter; } } 변수 counter는 1 function(){ return ++counter; } myClosure(); 2 myClosure(); 3 myClosure(); 4 반환 값 함수 Literal 가인수 init 에 1세트 로컬 변수 counter 변환값인 함수 Literal을 경유 하여 로컬 변수를 참조, 조작 할 수 있다. 내부적으로 참조하고 있는 로컬변수 counter도 함께 남 아있다. -> 데이터의 보존장 소(기억 영역)를 지닌 함수가 만들 어 짐 var myClosure1 = closure(1); function closure(init){ var counter = init; return function(){ return ++counter; } } 글로벌 객체 myClosure1 myClosure2 var myClosure2 = closure(100); Call 1-1 Call 1-2 Call 1-1 Call 1-2 counter=1 counter=100 함수 리터럴 (Closure) 함수 리터럴 (Closure)
  • 15. Closure 실습 호출마다 생성된 Call 객체는 별개의 것으로, 각각의 Call 객체에 속한 로컬 변수 Counter 도 별개의 것이 됨. 각각의 Scope 체인은 독립된 공간 임. function closure(val){ var count = val; return function(){ return ++count; } } var cls1 = closure(1); console.log(cls1()); console.log(cls1()); var cls2 = closure(100); console.log(cls2()); console.log(cls2()); 클로저 (Closure) 객체 (Object) 클로저를 감싸고 있는 부모 함수 생성자 클로저로 부터 참조되는 로컬 변수 프로퍼티 클로저 자신 메소드 클로저 리턴 함수 호출 인스턴스화 클로저를 대입하는 변수 인스턴스 익명 함수를 나타내는 Call 객체 Closure 호출 시 생성 Closure 함수의 Call 객체 글로벌 객체
  • 16. W www.circul.us G group.circul.us S social.circul.us C cafe.circul.us CONTACT.US circulus@circul.us THINKER TO MAKER ANY QUESTION? x

Hinweis der Redaktion

  1. Circulus 팀 박종건입니다. 위 사진은 작년 창조경제박람회때 포스터 운반하던 파이보의 모습입니다. 파이보와 함께 펼쳐가는 미래를 이야기 하겠습니다.