Javascript Study2

Javascript

No Image

3. 언어의 기초

  • ==, === 연산자

    • ==, != 연산자는 비교하기 전에 형변환을 진행한다.
    • false => 0 true => 1 변환한다.
    • “5”와 5 비교한다면 문자열을 숫자로 형변환을 시도.
    • 하나가 객체이고 하나다 객체가 아니면 valueOf() 호출한다.
    • null과 undefined 동일하다.
    • NaN이라면 false를 반환 항상 false를 반환한다.
  null == undefined // true
  "NaN" == NaN // false
  NaN == NaN // false
  true == 1 // true
  true == 2 // false
  "5" == 5 //true
  • ====은 피연산자의 타입을 변환하지 않고 있는 그대로 비교한다.
    var result1 = {"55" == 55}; //true
    var result2 = {"55" === 55}; //false
  
  • ==,!=은 타입 변환 때문에 자주 문제가 발생하므로 대신 ===,!==를 자주 사용하자. 데이터 타입을 관리하기 쉬워진다.
  • Switch 문

    • ===로 값을 비교하므로 타입 변환은 일어나지 않는다. ex) “10”과 10은 서로 다르다.
  • Overloading 없음

4. 변수와 스코프, 메모리

  • ECMAScript의 변수는 원시 값과 참조 값 두가지 타입의 데이터를 저장할 수 있다.

    • 원시 값 : undefined, Null, Boolean, 숫자, 문자열
    • 참조 값 : Reference 공유
    // 참조 값
    var person = new Object();
    person.name = "Young Jae";
    alert(person.name); //Young Jae

    // 원시 값
    var name = "Young Jae";
    name.age = 27;
    alert(name.age); // undefined

    // 값 복사
    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Young Jae";
    alert(obj2.name); // Young Jae
  
  • 매개변수 전달은 값이 복사하는 것과 똑같다.

function addTen(num){ // num => local Variable
  num += 10;
  return num;
}
var count = 20;
var result = addTen(count);
alert(count); // 20
alert(result); // 30
  • obj는 힙에 존재하는 전역 객체를 참조

function setName(obj){
  obj.name = "NESOY"
}
var person = new Object();
setName(person);
alert(person.name); // NESOY
  • 함수에 값을 전달했기 때문에 함수 내부에서 매개변수의 값이 바뀌었음에도 불구하고 원래 객체에 대한 참조를 그대로 유지.

function setName(obj){
  obj.name = "NESOY"
  obj = new Object();
  obj.name = "Cola";
}
var person = new Object();
setName(person);
alert(person.name); // NESOY
  • Execution Context(EC)

    • 자바스크립트 엔진은 코드를 실행하기 위해 필요한 여러가지 정보를 관리하기 위한 객체가 Execution Context다.
    • 변수
      • 함수 내부에서만 접근할 수 있는 지역변수
      • this로 접근 가능한 Property
    • 매개변수
    • 함수 선언
    • Scope
    • this
  var x = 'xxx';

  function foo () {
    var y = 'yyy';

    function bar () {
      var z = 'zzz';
      console.log(x + y + z); //xxxyyyzzz
    }
    bar();
  }
  foo();
  

No Image

  • Global Execution Context 생성
  • 함수가 호출 될때마다 Stack의 모양으로 쌓인다.
  • 함수가 종료되면 해당 함수의 EC 없어지고 이전 Context로 돌아온다.
  • Scope Chain(SC)
    • List 형태를 띄고 있다.
    • SC의 목적은 Execution Context가 접근할 수 있는 모든 변수와 함수에 순서를 정의하는 것이다.
    • Scope Chain의 앞쪽은 항상 코드가 실행되는 컨텍스트의 변수 객체이다.
  • Javascript에는 블록 레벨 스코프가 없다.

    • var를 사용해 선언한 변수는 자동으로 가까운 컨텍스트에 추가된다.
    • 선언하지 않으면 자동으로 전역 컨텍스트에 추가된다.
  // var로 선언
  function add(num1,num2){
    var sum = num1 + num2;
    return sum;
  }
  var result = add(10, 20); //30
  alert(result);  // Error


  // 그냥 선언
  function add(num1,num2){
    sum = num1 + num2;
    return sum;
  }
  var result = add(10, 20); //30
  alert(result);  // 30
  

참조

http://poiemaweb.com/

http://www.nextree.co.kr/p7363/

0%