자료 저장소

http://perfectionkills.com/javascript-quiz/


perfectionkills 블로그에 있는 자바스크립트 퀴즈 14개를 나름대로 풀어봤습니다.(블로그에 가면 채점도 가능)

답은 검증했는데, 문제가 좀 어려워서 풀이가 틀린 부분도 있을것 같습니다.


1.

  1. 
      (function(){
        return typeof arguments;
      })();
    
    •  
    •  
    •  
    •  
  2. 2.
    
      var f = function g(){ return 23; };
      typeof g();
    
    •  
    •  
    •  
    •  
  3. 3.
    
      (function(x){
        delete x;
        return x;
      })(1);
    
    •  
    •  
    •  
    •  
  4. 4.
    
      var y = 1, x = y = typeof x;
      x;
    
    •  
    •  
    •  
    •  
  5. 5.
    
      (function f(f){
        return typeof f();
      })(function(){ return 1; });
    
    •  
    •  
    •  
    •  
  6. 6.
    
      var foo = {
        bar: function() { return this.baz; },
        baz: 1
      };
      (function(){
        return typeof arguments[0]();
      })(foo.bar);
    
    •  
    •  
    •  
    •  
  7. 7.
    
      var foo = {
        bar: function(){ return this.baz; },
        baz: 1
      }
      typeof (f = foo.bar)();
    
    •  
    •  
    •  
    •  
  8. 8.
    
      var f = (function f(){ return "1"; }, function g(){ return 2; })();
      typeof f;
    
    •  
    •  
    •  
    •  
  9. 9.
    
      var x = 1;
      if (function f(){}) {
        x += typeof f;
      }
      x;
    
    •  
    •  
    •  
    •  
  10. 10.
    
      var x = [typeof x, typeof y][1];
      typeof typeof x;
    
    •  
    •  
    •  
    •  
  11. 11.
    
      (function(foo){
        return typeof foo.bar;
      })({ foo: { bar: 1 } });
    
    •  
    •  
    •  
    •  
  12. 12.
    
      (function f(){
        function f(){ return 1; }
        return f();
        function f(){ return 2; }
      })();
    
    •  
    •  
    •  
    •  
  13. 13.
    
      function f(){ return f; }
      new f() instanceof f;
    
    •  
    •  
  14. 14.
    
      with (function(x, undefined){}) length;
    
    •  
    •  
    •  
    •  



1) arguments 타입은 object 입니다.

답: object


2) g()는 외부에서 사용할 수 없는 f의 프로퍼티 이고, g 함수 내부에서는 사용 가능합니다.

답: Error


3) IIFE 사용, 내부 선언된 변수는 삭제가 불가능합니다. delete x(= false)

답: 1


4) 콤마는 개행과 같고, 나머지는 오른쪽에서 왼쪽으로 연산이 수행됩니다.

최초 x는 값이 없으므로 typeof 반환 값은 "undefined" 입니다.

따라서 y, x 순서로 "undefined" 라는 문자열이 들어갑니다.

답: "undefined"


여기서 undefined와 "undefined"의 차이는?

undefined는 windows.undefined로 전역에 선언된 기본 자료형입니다.

typeof는 문자열로 값의 유형을 반환하는 연산자입니다.


5) IIFE 사용, function() {return 1;} object가 생성되어 f 변수로 전달되고, 

내부에서 f()를 호출하고 f()는 반환값 1을 반환하고 typeof는 1의 타입을 반환합니다.

답: "number"


6) IIFE 사용, foo의 bar 프로퍼티를 파라메터로 전달하므로 arguments[0] 은 bar 입니다.

bar는 function() {return this.baz ; }를 가진 object 인데, bar 함수가 this를 사용합니다. 

bar를 호출한 함수의 context 체인에는 baz 프로퍼티가 없습니다.

(프로퍼티로 실행되는게 아니니까 메서드가 아니라 함수로 지칭)

답: "undefined"


7) foo.bar 프로퍼티의 함수를 f에 대입해서 호출하는데 f의 리턴이 this를 사용합니다.

하지만 6번 문제와 마찬가지로 f를 호출한 context 체인에는 baz가 없습니다.

답: "undefined"


8) f(), g() 함수가 순차적으로 호출되고 마지막 리턴값인 g()의 반환값인 2를 f에 대입합니다.

답: "number"


9) if 구문에 상태값은 ture, false로 평가되는 표현식이므로 function f(){}는 function으로 평가되므로 ture 입니다.

하지만 f가 사용가능한 범위는 if() 괄호 안으로 한정되므로 그 범위를 벗어난 f는 존재하지 않습니다.

답: "1undefined"


10) ["undefined", "undefind"] object를 생성하고 [1] 프로퍼티를 접근한 값을 x에 대입했습니다.

[0] = ["undefined"] // typeof x;

[1] = ["undefined"] // typeof y;

x의 값은 "undefind" 이고 typeof 반환값은 "string" 입니다. 

한번더 typeof를 해도 "string" 입니다.

답: "string"


11) {foo: {bar: 1}} object를 foo에 파라메터로 전달했습니다.

bar에 접근하기 위해서는 foo = {foo: {bar:1}}가 되므로 bar에 접근하기 위해서는 foo.foo.bar가 되어야 합니다.

답: "undefined"


12) 함수 스코프 내에서 선언된 함수는 인터프리터가 동작할 때 함수 끌어올림(function hoisting)에 의해서 상단으로 끌어올려집니다. 

자바스크립트는 함수 오버로딩이 지원되지 않기 때문에 같은 이름을 가진 함수를 두번 선언 경우 마지막 선언된 함수로 덮어씌워집니다.

따라서, 마지막에 선언된 f()가 리턴하는 값이 출력됩니다.

답: 2


13) f()와 f 둘 다 "function" 타입인데, f()의 prototype 체인에 f가 존재하지 않습니다.

false


14) with를 사용하면 with의 괄호 안은 표현식의 실행 context가 됩니다.

즉 with의 {} 범위 안은 function(x, undefined){}의 실행 context로 변경되므로

이름 없는 함수의 프로퍼티를 사용할 수 있게 됩니다. (caller, name, length, arguments)

length는 함수의 파라메터 개수를 가지고 있으므로 답은 2입니다.

답: 2


#4, #10 Thanks to

http://stackoverflow.com/questions/5663277/what-is-the-difference-between-undefined-and-undefined


quiz.pdf


댓글 로드 중…

최근에 게시된 글