为什么 var name = function(){...} 形式的函数没有在 ES5 中提升?

why are functions in the form of var name = function(){...} not being hoisted in ES5?

下面的代码片段抛出一个 ReferenceError: selectTen is not defined

    var select = _.pipe(
      selectTen,
      fetchUrls,
      awaitUrlData,
      connectToLoad
    )

    var selectTen = _.partialRight(selectItems, [4]) 
    var connectToLoad = _.partialRight(connect, [load]);  

虽然以下代码段运行良好:

   var selectTen = _.partialRight(selectItems, [4]) 
   var connectToLoad = _.partialRight(connect, [load]);  

    var select = _.pipe(
      selectTen,
      fetchUrls,
      awaitUrlData,
      connectToLoad
    )

我 运行 这段代码是 angularjs 使用 vanilla (ES5) JavaScript 项目的一部分,其中 .js 文件包含在 index.html 的标签中。没有使用模块加载器

_. 表示法是 lodash 函数式编程库的一部分。可以说它们 return 起作用并且可以用 function(param){...}.

代替

为什么第一个片段中没有托管 selectTen 和 connectToLoad 函数?

因为它们不是定义的函数,所以它们是具有函数文字作为其值的常量。

如果你愿意,例如:

function selectTen(selectedItems) { return _.partialRight(selectedItems, [4]); }

然后他们会被吊起来

let 声明一样,const 声明的范围限定在它们的封闭块中,就好像变量(好吧,常量)是在块的顶部声明的一样。但是,在代码中实际出现声明的位置之前,无法使用该值。

块的开头和声明出现的点之间的间隙被称为(相当戏剧性地)"temporal dead zone"。