코딩테스트 연습
🟡언어 : Javascript
문제 설명
정수 a와 b가 주어집니다. 각 수를 입력받아 입출력 예와 같은 형식으로 출력하는 코드를 작성해 보세요.
-100,000 ≤ a, b ≤ 100,000
입력 #1
4 5
출력 #1
a = 4
b = 5
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
const input1 = Number(input[0]);
const input2 = Number(input[1]);
if(input1>=-100000 && input1 <=100000&&input2>=-100000 && input2 <=100000){
console.log('a = '+input1);
console.log('b = '+input2);
}
});
input 배열은 전역 변수로 선언
⭐ 지역 변수(local variable) : 함수 내에서 선언된 변수
⭐ 지역 변수는 변수가 선언된 함수 내에서만 유효하며, 함수가 종료되면 메모리에서 사라짐
⭐ 함수의 매개변수 또한 함수 내에서 정의되는 지역 변수처럼 동작
function localNum() {
var num = 10; // 지역 변수 num에 숫자 10 대입
document.write("함수 내부에서 변수 num의 타입은 " + typeof num + "입니다.<br>"); // number
}
localNum(); // 함수 localNum()을 호출함.
document.write("함수의 호출이 끝난 뒤 변수 num의 타입은 " + typeof num + "입니다."); // undefined
var b = "A가a나A다a"
b.replace(/a/g,"")
// 결과 : "A가나A다"
b.replace(/a/gi,"")
// 결과 : "가나다"
⭐ 전역 변수(global variable) : 함수의 외부에서 선언된 변수
⭐ 프로그램의 어느 영역에서나 접근할 수 있으며, 웹 페이지가 닫혀야만 메모리에서 사라짐
var num = 10; // 전역 변수 num 선언
function globalNum() {
document.write("함수 내부에서 변수 num의 값은 " + num + "입니다.<br>"); // 10
num = 20; // 전역 변수 num의 값을 함수 내부에서 변경
}
globalNum(); // 함수 globalNum()을 호출
document.write("함수의 호출이 끝난 뒤 변수 num의 값은 " + num + "입니다."); // 20
_ 🛡️ const : 상수 (변치 않는 값을 갖는 변수 - 항상 같은 수)
- 값 재할당 X
const myName = 'NY KIM';
myName = 'Nana'; //TypeError: Assignment to constant variable
- 반드시 값 할당
const a;
console.log(a); //SyntaxError: Missing initializer in const declaration
_ 🕯️ let
- 다른 값 재할당 O
let meal = 'Bulgogi';
meal = 'Bibimbap';_
나중에 다른 값 줄 거야!: let
값 안 바꿀 건데: const
⭐ 스코프(scope) 란 변수가 사용될 수 있는 영역
- var 는 함수 스코프라서 함수 밖에서 사용하면 에러가 발생한다.
function error() { var a = 1; } console.log(a); // ReferenceError: a is not defined
- var 키워드 없이 변수를 선언하면 전역 변수가 된다.
function global() { a = 1; } function local() { console.log(a); } global(); local(); // 1 출력
- for 문에서 선언된 변수가 사라지지 않는다.
for 문 뿐만 아니라 while, switch, if 문 등 함수 내부에서 작성되는 모든 코드가 같은 문제를 안고 있다.for (var i = 0; i < 10; i++) { console.log(i); // 0 ~ 9 출력 } console.log(i); // 10 출력
- 변수를 선언 없이 사용하면 참조 에러가 발생한다.
console.log(a); // ReferenceError: a is not defined
- 하지만 다음 코드는 에러가 발생하지 않는다.
console.log(a); // undefined var a = 1;
- 호이스팅에 의해 위 코드는 아래와 같이 취급된다.
var a = undefined; console.log(a); // undefined a = 1;
- 심지어 변수 선언 전에 값을 할당할 수도 있다.
console.log(a); // undefined a = 2; console.log(a); // 2 var a = 1;
=> 이런 호이스팅 개념은 코드를 직관적이지 않게 만들며, 버그가 발생하여도 정확한 원인을 찾기 힘들게 만든다.
⭐ ES6 에서 const 와 let 을 이용하는 새로운 변수 정의 방법이 생김
- 블록을 벗어나도 살아있던 var 변수와 달리 const, let 변수는 블록을 벗어나면 관리해줄 필요가 없다.
if (true) { const a = 0; } console.log(a); // ReferenceError: a is not defined
- const, let 은 서로 다른 스코프에서 같은 이름의 변수를 사용할 때 실수를 방지
console.log(a); // ReferenceError: Cannot access 'a' before initialization const a = 1;
- 아래 코드에서 a 는 다른 블록 스코프지만 상위에 선언되었기 때문에 1 이 출력
const a = 1; { console.log(a); // 1 }
- 하지만 아래 코드에서는 참조 에러가 발생한다. 하위 블록 스코프에서 호이스팅으로 인해 const a = 2 로 할당 되기 전까지는 사용이 불가능하다. 이처럼 같은 이름의 변수를 사용할 때의 실수를 방지해준다.
const a = 1; { console.log(a); const a = 2; }
const 로 정의된 변수 : 재할당 불가능, const 로 정의된 객체의 내부 속성값은 수정 가능
let 으로 선언된 변수 : 재할당 가능const arr = [1, 2]; arr[0] = 3; arr.push(4); console.log(arr); // [3, 2, 4]
💗자세한 내용은 아래 블로그에 이해하기 쉽게 설명
https://nykim.work/72