프로그래밍 언어에서 변수들처럼 다룰 수 있는 함수
- 함수객체를 변수에 치환 가능
(함수의 이름으로 함수를 변수에 치환가능)
- 인수로 함수 가능
- 매개변수로 함수 가능
- 함수의 반환값으로 함수 가능
function f1() {
document.write("<br/>밥은 먹었니?");
}
function f2(func) { // 매개변수로 함수객체를 전달 받음
func(); // f1 함수 호출
}
function f3(f) {
//return f(); // (f)를 실행하고 빠져나오기
return f; // 반환값이 함수 객체
}
//let hello = function hi() { // 함수를 변수에 치환하는 것도 가능
let hello = function() { // 위와 같음 : 이름이 없는 함수는 anaonymous함수
f2(f1); // f1 함수의 (객체)주소가 인수가 되는 것. ,,, f2(f1())과는 다름
//f2(f1()); // f1함수의 실행 결과가 인수가 되는 것
document.write("<br/>^^^;");
re = f3(f1); // 주소가 리턴되서
re(); // 주소를 받아 찍음
f3(f1)(); // f1 함수객체를 받은 후 실행,, () : '실행하라' 라는 뜻
}
let a1 = 10; // 전역변수
const b1 = 20;
function func1() {
let c1 = 30; // 지역변수
const d1 = 40;
document.write("<br/>a1:", a1, ", b1:", b1);
document.write("<br/>c1:", c1, ", d1:", d1);
function func2() { // 함수안에다 함수를 선언함
let e1=50;
document.write("<br/>e1:", e1); // e1은 func2의 멤버
document.write("<br/>a1:", a1, ", b1:", b1); // 얘네는 전역
document.write("<br/>c1:", c1, ", d1:", d1); // 얘들은 fucn1의 멤버
}
func2();
/// document.write("<br/>e1:", e1); // 에러남 : eq은 func2의 멤버이기 때문에 func2 안에서만 해야함,, 얘는 바깥에서 실행해서 오류
}
func1();
document.write("<br/>func1 밖에서 a1:", a1, ", b1:", b1);