- 간단한 테스트 시 편리할 수 있으나 실제 업무에서는 문제 발생 여지가 많아진다.
- ES6 이후 문제점 보완을 위해 let, const 가 추가됨
var a = 'hungry';
console.log(a); //hungry
var a = 'thirsty';
console.log(a); //thirsty 아무 에러가 발생하지 않는다.
let b = 'one';
console.log(b); // one
let b = 'two';
console.log(b); // Uncaught SyntaxError: Identifier 'b' has already been declared
// 에러가 뜬다.
b='three';
console.log(b); //three 재할당은 가능하다.
const c = 'red';
console.log(c); // red
const c = 'green';
console.log(c);
// Uncaught SyntaxError: Identifier 'c' has already been declared
c = 'blue'
console.log(c)
//Uncaught TypeError: Assignment to constant variable.
var 키워드는 선언과 함께 undefined로 초기화되어 메모리에 저장되고, let, const는 초기화없이 선언만 메모리에 저장된다.
console.log(a);
var a = 2; //undifined //선언, 초기화까지 진행, 할당은 진행되지 않았다.
console.log(b);
let b = 2; // ReferenceError //선언까지만 진행
console.log(c);
const c = 2; // ReferenceError //선언까지만 진행
d(); //Hello //함수선언문에서는 호이스팅 일어난다.
console.log(e); //undefined // 함수 표현식도 선언까지만 진행
function d() {
console.log('Hello');
}
var e = function() {
console.log('Hi');
}
//if
if (condition1) {
statement1;
} else if(condition2){
statement2;
} else {
statement3;
}
//switch
switch (expression) {
case label1:
statements1
[break;]
case label2: //콜론을 넣는다.
statements2
[break;] //case가 하나 선택되면 멈춘다.
...
default: //기본값
statements_def
[break;]
}
//for
for ([initialization]; [condition]; [final-expression]){
statement
} //초기값, 반복 조건, 반복 후 평가할 식
for (var i = 0; i < 10; i++) {
console.log(i);
}
//while
while (condition){
statement;
}
var n = 0;
var x = 0;
while (n < 3){ //참일때 실행
n++;
x += n;
}
a1 = true && true // t && t returns true
a2 = true && false // t && f returns false
a3 = false && true // f && t returns false
a4 = false && (3 == 4) // f && f returns false
a5 = 'Cat' && 'Dog' // t && t returns "Dog"
a6 = false && 'Cat' // f && t returns false
a7 = 'Cat' && false // t && f returns false
a8 = '' && false // f && f returns ""
a9 = false && '' // f && f returns false
논리 OR , | 연산자 |
o1 = true || true // t || t returns true
o2 = false || true // f || t returns true
o3 = true || false // t || f returns true
o4 = false || (3 == 4) // f || f returns false
o5 = 'Cat' || 'Dog' // t || t returns "Cat"
o6 = false || 'Cat' // f || t returns "Cat"
o7 = 'Cat' || false // t || f returns "Cat"
o8 = '' || false // f || f returns false
o9 = false || '' // f || f returns ""
o10 = false || varObject // f || object returns varObject
n1 = !true // !t returns false
n2 = !false // !f returns true
n3 = !'' // !f returns true
n4 = !'Cat' // !t returns false
function print(name){
var lastname="Lee";
return lastname+" "+name;
}
var print = function(){
return 'hi'
}
function a() {
console.log(arguments);
}
a(1,2,3); //[Arguments] { '0': 1, '1': 2, '2': 3 }
function a() {
console.log(arguments[2]);
}
a(1,2,3); //3
//arguments를 이용해 합 구하기
function sum(){
var result=0;
for (var i=0;i<arguments.length; i++){
result+=arguments[i];
}
console.log(result);
}
sum(1,2,3,4,5); //15
function foo(b){
var a = 5;
return a * b + 10;
}
function bar(x){
var y = 3;
return foo(x * y);
}
console.log(bar(6)); //100