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



以下代码片段抛出引用错误:未定义 selectTen

    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
    )

我正在使用vanilla(ES5)JavaScript将这段代码作为angularjs项目的一部分运行,其中.js文件包含在index.html的标签中。未使用模块加载程序

_.符号是 Lodash 函数式编程库的一部分。可以说它们返回功能并且可以替换为 function(param){...} .

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

let声明一样,const声明的作用域为其封闭块,就好像变量(嗯,常量)是在块的顶部声明的一样。但是,在代码中实际显示声明的点之前,不能使用该值。

块的打开点和声明出现的点之间的间隙被称为(相当戏剧性的)"时间死区"。

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

如果您这样做,例如:

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

然后他们会被吊起来

最新更新