为什么 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"。
下面的代码片段抛出一个 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"。