JS

function - 함수의 범위

gurwhddl 2022. 9. 7. 19:46

function scope

 

function helpMe() {

let msg = 'asdfasdf';  내부 변수

msg // 오류남 

왜냐하면 저 함수 안에서만 사용되는 함수이기 때문에 

 

만약에 저걸 쓰고싶으면

 let msg = 0;

function helpMe() {

msg = 'asdfasdf';

}

helpMe()

msg 하면 기존의 변수를 업데이트 되는 개념인데 잘 안씀

 

function 안의 msg를 let으로 다시 재설정하게 되면 msg는 그대로 0으로 나옴 

*이 변수가 그 함수에 한정되었기 때문

함수 안에서 console.log 찍어보면 함수안에서 설정한 변수로 나옴

 

변수가 중복으로 설정되어있으면 함수 내에서는 가까운 변수를 이용함

변수가 블록 안에서 설정되면 변수들은 그 블록 안에서만 존재 

블록은 보통 { } 안을 의미함

 

let radius = 8;

if(radius > 8) {

let A = 2

let ...... } 

해놓으면 radius =8 만 반영되고 { } 안에있는건 undefined 

만약에 var를 쓰면  반영됨 - 그래서 안쓰는거

함수랑 비슷한 의미로 생각하면 될듯

 

렉시컬 범위

함수를 중첩했을 때 자식 함수는 부모 함수의 변수같은거에 엑세스 가능 

but 역방향으로는 안됨

 

함수 표현식(function expression)

const add = function (x, y) {return x+y} 사용할땐 똑같이 add(3,4) 이런식으로

변수에 함수를 넣어버리는 느낌

이름 없는 함수를 변수에 넣어버림

*함수를 그냥 값으로 표현함

 

highest order function 

함수를 인수로 받는 함수 - 함수 두개 만들어서 매개변수 자리에 함수 넣는거

 

팩토리 함수

함수안에 함수를 만들어놓음 

함수 한개를 변수로 지정해서 계속 써먹을 수 있음

ex) function makeBetweenFunc(min,max) {

return function(age) {

return age>=min && age <= max } - 이렇게 하면 true/false로 변환해줌

}

 

const toCheckAdult = makeBetweenFunc(19,64)

해놓으면 toCheckAdult는 둘째줄~셋째줄 함수가 되는거임

toCheckAdult(32) 하면 age에 32가 들어가서 true/false값을 대신 찾아줌

팩토리 함수 만들어서 체크하고 싶은 나이만 지정해서 변수로 만들어주면 일일이 함수 두세줄씩 안만들어도 됨(근데 개어려운듯)