2017-03-06 102 views
0

您能否告诉我什么是下面的返回语句中的菜单(返回菜单;)?它是一个变量(没有定义)或内部函数的名称?函数的返回值是什么?

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