//함수정의시작
function add(x, y) { //add함수이름 x,y 매게변수
return x + y; //반환값
}
//함수정의끝
add(2, 5); //함수호출
add(4, 5); //함수재사용
//변수에 하수 리터럴을 할당
var f = function add(x, y) {
return x + y;
}
function add(x, y) {
return x + y;
}
var x; //변수선언문
x = 5; //할당문->undefined 안뜸
function foo(){}; //함수선언문
if(x>1) {console.log(x)}; //조건문
for(var i =0; i<2; i++){console.log(i);} //반복문
-표현석이 아닌 문은 변수에 할당 할 수 없다?
//함수 선언문은 표현식이 아닌 문이므로 변수에 할당 할 수 없다
//하지만 함수 선언문이 변수에 할당되는 것처럼 보인다
//함수 리터럴의 중의적 표현에 의해 표현식으로 판단됨
var add = function add(x,y){
return x+y;
}
add(2,5)//7
//함수 리터럴 단독이면 선언문
function foo(){console.log('foo');}
foo(); //foo
(function bar(){console.log('bar');});
bar(); //referenceError: bar is not defined
var add= function add(x,y){
return x+y;
}
add(2,5); //할당된 식별자 호출
var add = function (x, y) {
return x + y;
}
var score=100;
score;// 100
10+20
square()
person.getName()
var add= function foo(x,y){
return x+y;
}
undefined
add(2,5); //7
foo(2,5); ///VM636:1 Uncaught ReferenceError: foo is not defined
//함수 참조
console.dir(add); //f add(x,y)
console.dir(sub); // undefined
//함수 호출
console.log(add(2,5)); // 7
console.log(sub(2,5)); // TypeError: sub is not a function
//함수 선언문
function add(x,y){
return x+y;
}
//함수 표현식
var sub = function(x,y){
return x-y;
}
console.log(k); //undefined
var k=10;
var add = new Function('x', 'y', 'return x+y');
var add = (x, y) => x + y;
function add(x,y){
return x+y;
}
//인수1 , 2 가 매개변수 x, y 에 순서대로 할당되고 몸체가 실행
var result = add(1,2)
add(1,2,19);// 초과된 인수는 무시되고 암묵적으로 arguments객체 프로퍼티에 보관
function add(a,b,c){
a=a||0;
b=b||0;
c=c||0;
return a+b+c;
}
add(1,2,3); //6
add(1,2); //3
add(1); //1
add(); //0
function changeVal(primitive, obj){
primitive+=100;
obj.name='kim';
}
//외부 상태
var num=100;
var person = {name: 'Lee'};
changeVal(num,person);
console.log(num); //100 값 보존
console.log(person); //{name: 'Kim'} 원시값 훼손
var res=(function(){
var a=3;
var b=5;
return a*b;
}())
console.log(res);//15
res = (function(a,b){
return a*b;
}(3,5))
console.log(res);//15