function add(x,y){
return x+y;
} // 코드블록이기 때문에 ;생략
//add 이름-> 식별자, 몸체 내에서만 사용 가능
// 이름이 있다 -> 기명함수
// 없다 -> 익명함수
var a = function add(x,y){
return x+y;
}; // 값이므로 ;을 붙임
// 1. 함수 평가: 함수와 동일한 이름의 식별자 생성
// 2. 함수 객체 할당: 함수 객체가 들어있는 메모리의 주소를 동일한 이름의 식별자가 참조한다
function a(){
~~~~~~
}
//선언문
function a(){
~~
}
//리터럴 표현식
//()그룹연산자에 의해 피연사자 되어 값으로써 사용이 된다
(function a(){});
var a = function(){};
함수리터럴: 값으로써의 함수
선언문: 기명함수, 값이 아닌 문
표현식: 함수리터럴을 변수에 저장해서 사용, 값인 문
console.log(a()); // 1
console.log(b); // undefined
// 런타임 이전에 생성및 할당이 이루어짐
function a(){
return 1;
}
// 런타임 이전에 생성되고 undefined로 초기화된 상태
let b = 3;
// 변수 a 생성
// undefined로 초기화
console.log(a()) // undefined
var a = function(){~~~~};
var a = new function(~~~);
const a = (x,y) =>x+y;
console.log(a(2,5)) // 7
function a (매개변수){}
a(인수);
let a = 1;
const b ={
c=2
};
// 원시타입 = 1이 다른 메모리에 재할당 된 후 변수에 할당
// 객체 = 참조값인 주소 값을 전달하기 때문에 값에 직접적인 접근이 가능
// 객체는 불변성의 특성을 갖지 않는다
function c(a,b){
a=3;
b.c =4;
}
c(a,b);
console.log(a,b.c); //1, 4
(function(~~~){}());
function outer(){
function inner(){
}
inner();
}
outer();
function repeat(n,f){
for(let i =0; i<n; i++){
f(i);
}
}
var logAll = function(i){
console.log(i);
};
repeat(5,logAll);
repeat(5, function(i){
if(i%2) console.log(i);
});
let count =0;
//순수함수
function increaseA(n){ return ++n;}
//비순수함수
function increaseB(){ return ++count;}
// 재할당 반환
count = increaseA(count);
// 변경
increaseB();