2017-03-06 3 views
0

아래의 return 문에 Menu가 무엇인지 말해 주시겠습니까? (return Menu;)? 변수 (정의되지 않음) 또는 내부 함수의 이름입니까?함수의 반환 값은 무엇입니까?

var Menu = (function() { 
    // A straightforward constructor. 
    function Menu(item_list, total_pages) { 
     // The this keyword is mandatory. 
     this.items = item_list; 
     this.pages = total_pages; 
    } 
    // Methods 
    Menu.prototype.list = function() { 
     console.log("Our menu for today:"); 
     for (var i = 0; i < this.items.length; i++) { 
      console.log(this.items[i]); 
     } 
    }; 

    return Menu; 
}()); 

답변

2

는 변수인가 ...?

효과적으로. 이 함수 선언에서 온다 :

function Menu(item_list, total_pages) { 
    // The this keyword is mandatory. 
    this.items = item_list; 
    this.pages = total_pages; 
} 

기능 선언이 사양은 범위의 현재 실행 컨텍스트에서 "바인딩"부르는 만듭니다. 그것은 사실 변수입니다.

그래서 return Menu; 익명 함수 밖으로 Menu 함수의 참조를 반환하고, 외부 var Menu = ... 할당 포함하는 범위에서 Menu 변수에 할당한다.

2

함수 선언 함수 자체의 이름과 동일한 이름을 가진, 이들이 선언되는 기능의 범위에서 변수를 생성한다.

따라서 반환 값은 Menu 변수의 값과 같은 함수입니다.

function return_function() { 
 

 
    function foo() { 
 
    console.log(1); 
 
    } 
 

 
    console.log(foo); 
 

 
    var bar = foo; 
 
    foo = 2; 
 

 
    console.log(foo); 
 

 
    return bar; 
 

 
} 
 

 
var baz = return_function(); 
 

 
baz();

+0

계정을 병합해야합니다. :-) 우리 사이에는 Skeet 박자가 있습니다! –

+0

@ T.J.Crowder :) – Quentin