JS는 식과 문으로 구분된다. 식은 문처럼 사용할 수 있다. 반대는 안된다.
식은 값을 만들어낸다. 종류로는 4가지.
문은 어떤 걸 수행한다.
문은 함수의 인자, 피연산자 등 값으로 쓰일 수 없다.
if, ifelse, for, while, 등 반복, 조건"문"이 문에 해당된다.
//함수 선언문
function foo (func) {
return func.name;
}
//익명함수라고 불리는 함수 표현식
console.log(foo(function () {})) // ""
//익명함수와 같이 표현식으로 사용되는 named 함수
console.log(foo(function myName () {} ));
foo();
foo2();
function foo () {
console.log("foo");
}
let foo2 = function(){console.log("foo2")} //TypeError: foo2 is not a function
///js look
function foo(){}
var foo2;
foo();
foo2();
foo2 = function(){};
표현식, 선언으로서의 각 차이는 다음과 같다.
JS가 값으로 들어오길 기대하는 곳에 함수를 선언하면, JS는 그것을 값으로써 사용하려하지만 만약 그 부분이 값으로 사용될 수 없다면 에러가 발생한다. => 이런 경우가 어떤게 있을까? ()안에 들어오는 함수가 에러를 발생시킬때?,
반면에 함수가 블록의 최상위 레벨에서 선언되면 그건 함수 선언이다.
즉, 값으로 쓰는 부분에 함수가 작성되면 표현식이다. 표현식이 값으로 쓸 수 없다(이 부분이 잘 이해가 가지 않음)면 에러가 발생될 것이다. (함수 선언이 들어온다는 말인가.)