코딩일기 2번째 입니다.
오늘은 부족하다고 생각한 내용들을 정리하려고 합니다.
전역 변수, 지역 변수
전역변수 : 함수 바깥에서 선언된 변수를 얘기하며 프로그램 전체에서 접근이 가능한 변수입니다.
지역변수 : 함수 내부에서 선언된 변수로 함수의 실행, 종료와 함께 생성되고 소멸되는 변수이고, 함수 바깥쪽에서 접근하는 것이 불가능합니다.
let x = 100; // 전역 변수
let y = 200; // 전역 변수
function func(){
x = 300; // 전역 변수 - let이 앞에 없으므로 전역변수 x의 값을 변경
let y = 400; // 지역 변수
z = "javascript";
console.log("함수안"+x); //300
console.log("함수안"+y); //400
console.log("함수안"+z);
}
func();
console.log("함수밖"+x); //300
console.log("함수밖"+y); //200
비트연산자 종류
연산자 | 설명 |
AND (&) | 두 비트가 모두 1일 때만 1을 반환합니다. |
OR (|) | 두 비트 중 하나라도 1이면 1을 반환합니다. |
XOR (^) | 두 비트값이 서로 다를때 1을 반환합니다. |
NOT (~) | 비트를 반전시킵니다. 0은 1로, 1은 0으로 변환됩니다. |
<< | 비트를 왼쪽으로 이동시킵니다. 예를 들어, 0001 << 2는 0100을 반환합니다. |
>> | 비트를 오른쪽으로 이동시킵니다. 예를 들어, 0100 >> 2는 0001을 반환합니다.만 1을 반환합니다. |
함수 유형
객체 생성자 함수
객체를 생성하는 함수입니다.
일반함수와 차이를 두기 위해 함수명의 첫 문자를 대문자로 표현합니다.
{
function func(num, name, com){
this.num = num;
this.name = name;
this.com = com;
this.result = function(){
document.write(`${this.num}. ${this.name}가 ${this.com}되었습니다.<br>`);
}
}
// 인스턴스
const info1 = new func("100", "함수", "실행");
const info2 = new func("200", "자바스크립트", "실행");
const info3 = new func("300", "리엑트", "실행");
// 실행문
info1.result();
info2.result();
info3.result();
}
프로토타입 함수
객체의 메서드를 '생성자 함수'내에 정의하지 않고도 생성된 객체에서 호출하여 사용 할 수 있습니다.
{
function Func(num, name, word){
this.num = num;
this.name = name;
this.word = word;
}
Func.prototype.result = function(){
document.write(this.num + ". "+ this.name + "가 " + this.word + "되었습니다.");
}
// 인스턴스
const info1 = new Func(1, "함수", "실행");
const info2 = new Func(2, "자바스크립트", "실행");
const info3 = new Func(3, "리엑트", "실행");
// 실행문
info1.result();
info2.result();
info3.result();
}
객체 리터럴 함수
중괄호 안에 프로퍼티를 정의하여 객체를 생성합니다.
{
function func(num, name, com){
this.num = num;
this.name = name;
this.com = com;
}
func.prototype = {
result1: function(){
document.write(`${this.num}. ${this.name}가 ${this.com}되었습니다.<br>`);
},result2: function(){
document.write(`${this.num}. ${this.name}가 ${this.com}되었습니다.<br>`);
},result3: function(){
document.write(`${this.num}. ${this.name}가 ${this.com}되었습니다.<br>`);
}
}
// 인스턴스
const info1 = new func("102", "함수", "실행");
const info2 = new func("202", "자바스크립트", "실행");
const info3 = new func("302", "리엑트", "실행");
// 실행문
info1.result1();
info2.result2();
info3.result3();
}
즉시 실행 함수
정의 되자마자 즉시 실행되는 함수입니다.
{
(function (){
document.write("500. 함수가 실행되었습니다.");
})();
(() => {
document.write("501. 함수가 실행되었습니다.")
})();
}
오답노트 복습
{
let num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i=9; i>=0; i--){
switch(num[i] % 2){
case 1:
console.log(num[i]);
break;
default:
console.log("*");
}
}
}
정리
for문의 조건이 i는 9부터 0까지 1씩 감소하므로 거꾸로 실행을 합니다.
switch문의 조건 num[i] % 2 == 1 일 경우 num[i]를 출력합니다.
아닐 경우에는 *로 출력합니다.
즉, num 배열에서 홀수인 숫자들 (9, 7, 5, 3, 1)이 역순으로 출력되고, 짝수인 숫자들 (0, 2, 4, 6, 8)에 대해서는 모두 별표(*)가 출력됩니다.
break;가 실행되지 않는 이유
break 구문은 switch 문에서 사용되며, 해당 case의 실행을 중단하고 switch문에서 빠져나오는 역할을 합니다. 하지만 이 코드에서는 break 구문이 필요하지 않습니다.
이유는 switch 문에서 실행되는 case 1 코드 블록이 끝나면, 자동으로 다음 루프 반복으로 이동하기 때문입니다. 즉, case 1의 실행이 끝난 후에는 다음 case 블록이 없으므로, 자동으로 switch 문에서 빠져나와서 다음 반복으로 넘어갑니다.
따라서, break 구문이 없어도 이 코드는 의도한 대로 작동합니다.
{
let a, b = 10;
for(let i=0; i<5; i++){
a = i;
b -= a;
}
console.log(a, b)
}
정리
a와 b 두 개의 변수를 선언합니다. 그 중에서 b 변수는 10으로 초기화됩니다.
그 다음으로, for 반복문이 시작됩니다. i 변수를 0으로 초기화하고, 5보다 작은 동안 a와 b 변수를 조작하는 연산을 반복합니다.
현재의 반복 인덱스 i를 a에 할당합니다.
b에서 a를 뺀 값을 b에 할당합니다.
다음 반복을 수행합니다.
반복문이 모두 실행된 후, console.log 함수를 사용하여 a와 b의 값을 출력합니다. a는 마지막으로 할당된 i 값이므로 4가 됩니다. b는 각 반복마다 a를 뺀 값이 누적되어 감소하므로, 10에서 0+1+2+3+4=10의 값이 빠져서 결과적으로 0이 됩니다.
따라서, console.log(a, b)의 출력 결과는 4 0이 됩니다.