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

时间:2017-01-10 14:55:53

标签: javascript angularjs lodash ecmascript-5

以下代码片段引发 ReferenceError:selectTen未定义

public void init()
{
     ChangeListener<Number> listener = (obs, ov, nv) -> update();
    node.widthProperty().addListener(listener);
    node.heightProperty().addListener(listener);
}

public void update()
{
      label.setText(String.format("width[%s] height[%s]", node.getWidth()), node.getHeight);
}

虽然以下代码段运行完全正常:

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

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

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

var selectTen = _.partialRight(selectItems, [4]) var connectToLoad = _.partialRight(connect, [load]); var select = _.pipe( selectTen, fetchUrls, awaitUrlData, connectToLoad ) 符号是lodash&#39;的一部分。函数式编程库。可以说他们返回了函数,可以用_.替换。

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

2 个答案:

答案 0 :(得分:2)

let声明一样,const声明的范围限定在它们的封闭块中,就好像变量(well,常量)被声明在块的顶部一样。但是,在声明实际出现的代码中,该值才能使用。

块的开口与声明出现点之间的间隙被称为(相当显着)“时间死区”。

答案 1 :(得分:1)

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

如果您这样做:

apply

然后他们将被悬挂