티스토리 뷰
함수(Function)
: 한 번 정의하면 몇 번이고 실행할 수 있고, 호출할 수 있는 javascript 코드 블록.
함수 선언식(Function Declarations)
- 변수를 정의하고 함수 객체를 변수에 할당.
- 호이스팅에 영향을 받음.
- 진짜 문장 아님. -> 반복문 내부, 조건문, try/catch/finally, with문 내부에 들어갈 수 없음.
함수 정의 표현식(Function Expressions)
- 호이스팅에 영향 받지 않음.
- 클로저, 콜백으로 사용.
ref) callback: 다른 코드의 인수로서 넘겨주는 실행 가능한 코드.
closure: 내부함수가 외부함수의 context에 접근할 수 있는 것.
함수의 return 값
this
- 일반적인 함수 호출 시, this === global 객체(non-strict mode) / undefined(strict mode)
- 메서드 호출 시, this === 호출한 객체(호출 컨텍스트)
- var self = this 숙어
var o = {
m: function() {
var self = this;
console.log(this === o); // true
f();
function f() {
console.log(this === o); // false: this는 global or undefined
console.log(self === o); // true
}
}
};
o.m();
생성자 호출
함수의 전달인자와 매개변수
- 매개변수의 타입, 개수 검사 x.
전달인자의 개수가 적을 때
- undefined 값으로 설정됨.
- optional한 전달인자로 활용 가능.(a = a || [])
전달인자의 개수가 많을 때 (varargs 함수 - Arguments 객체)
- arguments 객체를 이용하여 접근 가능. 숫자 인덱스로 접근하는 유사 배열 객체.
- arguments.length: 전달인자의 개수.
- arguments.callee: 프로퍼티가 현재 실행되고 있는 함수를 참조. 이름 없는 함수의 재귀 호출에 용이.
- arguments.caller: 해당 함수를 호출한 함수를 참조. 호출 스택에 접근 가능.
함수 프로퍼티, 메서드, 생성자
- 프로퍼티 정의하기
- 함수가 여러 번 호출되어도 그 값이 유지되어야 하는 '정적'변수가 필요할 때 사용.
mycnt.cnt = 0; // 함수 객체의 cnt 프로퍼티 초기화.
function mycnt() {
return mycnt.cnt++;
}
ref) 클로저로 활용 시
var mycnt() = (function() {
var cnt = 0;
return function() { return cnt++; };
} ());
- arguments.length 프로퍼티, prototype 프로퍼티
- call(), apply(), bind() 메서드
f.call(o, 1, 2); // 객체 o를 호출 컨텍스트로 함수 f를 호출. 전달인자는 1, 2. 함수 f 내에서 this === o.
f.apply(o, [1, 2]); // 위와 동일.
--------------------------------------위의 두 줄은 각 아래 3줄과 비슷한 코드.
o.m = f;
o.m(1, 2);
delete o.m;
function f(y) { return this.x + y; }
var o = { x : 1 };
var g = f.bind(o); // g(a) 호출 시 o.f(a) 호출됨.
g(2); // => 3
// 파셜 애플리케이션(Partial Application) == 커링(Currying)
// -> 일부 인자를 고정한 함수를 만드는 기법
var s = f.bind(o, 3); // this === o, y === 3으로 바인딩 됨.
s(); // => 4
ref) https://www.zerocho.com/category/JavaScript/post/579236d08241b6f43951af18
- Function() 생성자 (잘 사용 안함)
- var f = new Function("x", "y", "return x*y;");
- 동적으로 자바스크립트 함수를 생성하고 실행시간에 컴파일되는 것을 가능케 한다.
- 생성자가 호출될 때마다 함수 몸체를 분석(parse)하여 새로운 함수 객체를 생성한다.
- 생성자가 생성하는 함수는 어휘적 유효범위(lexical scoping)을 사용하지 않는다.
var scope = "global";
function constructFunction() {
var scope = "local";
return new Function("return scope");
}
constructFunction()(); // => "global"
'Web 개발 > 자바스크립트' 카테고리의 다른 글
[JSON] 기초 (0) | 2018.11.14 |
---|---|
[JS] 배열 메서드 (0) | 2018.11.14 |
[JS] ES2015+ (ES6) (0) | 2018.11.14 |
[JS] Javascript 기본 (0) | 2018.11.13 |
[JS] 호이스팅(Hoisting)과 클로저(Closure) (0) | 2018.11.12 |
- node cp -r
- createAction
- sass
- javascript event
- Webpack Error
- ELIFECYCLE
- jest
- fs-extra
- external editor
- node mkdir -p
- node rm -rf
- ModuleParseError: Module parse failed: Unexpected token
- errno 253
- 자바스크립트
- mkdirp
- Storybook Error
- 페이지 특정 위치 link
- ECONNRESET
- 스터디
- node file package
- 인가
- rimraf
- 인증
- JavaScript
- file opener preference
- 웹팩 에러
- 프로그래머스
- 스토리북 에러
- make-dir
- node fs