식, 문

JS는 식과 문으로 구분된다. 식은 문처럼 사용할 수 있다. 반대는 안된다.

식 (expression)

식은 값을 만들어낸다. 종류로는 4가지.

문 (statement)

문은 어떤 걸 수행한다.

문은 함수의 인자, 피연산자 등 값으로 쓰일 수 없다.

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는 그것을 값으로써 사용하려하지만 만약 그 부분이 값으로 사용될 수 없다면 에러가 발생한다. => 이런 경우가 어떤게 있을까? ()안에 들어오는 함수가 에러를 발생시킬때?,

반면에 함수가 블록의 최상위 레벨에서 선언되면 그건 함수 선언이다.

즉, 값으로 쓰는 부분에 함수가 작성되면 표현식이다. 표현식이 값으로 쓸 수 없다(이 부분이 잘 이해가 가지 않음)면 에러가 발생될 것이다. (함수 선언이 들어온다는 말인가.)