개발 R.I.P.
5/16 Dev.Feedback(이중For문 Break, 문자열에 적용되는 산술 연산자, 함수 선언식, 표현식 Hoisting 차이)
편행
2021. 5. 16. 18:47
반응형
1. 이중 포문 내에서 Break을 쓰기 위한 조건은 상위 포문에서 만들어줘야 한다. 만일 변수를 선언해야 한다면, 전역 변수가 아닌 로컬 변수로 선언해야 한다.
function Prime(num) {
let result = '2'
for(let i=3; i<=num; i=i+2){
let root = Math.sqrt(i);
let prime = true;
for(let j=3;j<=root; j=j+2){
if(i%j===0){
prime = false;
break
}
}
if(prime){
result = `${result}-${i}`
}
}
return result;
}
전역 변수로 Prime을 선언하고 true로 할당하는 것은 의미가 없었다.
로컬 변수로 선언하는 이유는
for문 내부에서 break의 조건을 만들어주기 위해서이기에 전역 변수로 선언하게 되면, break이 작동하지 않았던 것
2. 문자열에 적용되는 산술연산자는 '+' 뿐이다.
let str = '123';
console.log(str-'1')
위의 결과는 숫자열 122가 나온다.
console.log(str+'1')
위의 결과는 문자열 '1231'이 나온다.
https://github.com/denysdovhan/wtfjs
위의 링크에서 Javascript 내부에서 quirky한 부분들을 확인할 수 있다.
3. 함수 선언식은 코드를 구현한 위치와 관계없이 자바스크립트의 특징인 호이스팅에 따라 브라우저가 자바스크립트를 해석할 때 맨 위로 끌어 올려진다.
greet();
function greet() {
console.log('Hi, there.');
}
이렇게 해도 오류가 나지 않는다.
3. 함수표현식은 함수선언문과 달리 선언과 호출 순서에 따라서 정상적으로 함수가 실행되지 않을 수 있다.
greet();
let greet = function() {
console.log('Hi, there.');
}
이 이유는 호이스팅과 연관이 되어 있는데,
호이스팅이란 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것이다.
a = 5;
console.log(a);
let a; // 5
이렇게 코드를 작성을 하면, let은 호이스팅이 되지 않기에 밑의 결과값을 내놓는다.
Uncaught ReferenceError: Cannot access 'a' before initialization
let a;
a = 5;
console.log(a); // 5
즉 let로 변수를 선언해줄 때는 위의 경우처럼 꼭 우선적으로 선언을 해줘야 하는 것인데,
위의 함수 표현식을 살펴보면, greet이라는 함수가 선언되기 전에 호출이 된 것을 볼 수 있다.
그렇기에 오류가 나는 것이다.
반응형