更多
 当前上元教育宁波校 其它分校: 慈溪校 无锡校 常州校 南京校 上海校 绍兴校 南通校   (建议使用IE浏览本网站/分辨率1024*768px)    
宁波培训学校 宁波培训学校
 位置: 邦元教育 >> 机电培训 >> 技术资讯 >> 正文
 

轻松学习 JavaScript——第 5 部分:简化函数提升

作者:Admin  更新时间:2018/09/29  点击次数:

为了理解函数提升,让我们从以下代码开启我们的学习之旅:

console.log(foo);var foo = 9;

应该输出什么呢?

在任何其他编程语言中,这里的输出将会是reference error。但是,在JavaScript中,你将得到undefined作为输出。为什么?因为JavaScript会提升变量到执行上下文的顶部。执行上下文可以是声明变量的函数,也可以是声明变量的JavaScript文件。所以,让我们用函数重写上面的代码片段:

function abc() { 
console.log(foo); var foo = 9;
}
abc();

这里,变量“foo”提升到函数abc执行上下文的顶部;这意味着你可以在声明之前访问foo。简而言之,无论何时你声明一个变量,JavaScript解释器都可以将其分成两个语句:

声明一个变量。

赋值。

变量的声明位于执行上下文的顶部,而赋值发生在创建变量的位置。所以上面的代码片段被分解成两个语句,如下图所示:

宁波上元教育:轻松学习 JavaScript——第 5 部分:简化函数提升


变量foo被提升到函数abc的执行上下文的顶部,因此当你在声明之前使用它时,你会得到“undefined”作为输出。

请记住,使用let语句声明的变量不会被提升到执行上下文的顶部。

现在你知道JavaScript中的变量是如何被提升的了,接下来让我们来探讨JavaScript中的函数提升。在JavaScript中,可以通过两种方式来创建函数:

作为声明而创建的函数。

作为表达式而创建的函数。

作为声明或语句创建的函数作为一个整体提升到执行上下文的顶部。但是,作为表达式创建的函数会像变量一样提升。

为了说明这一点,让我们创建一个作为语句的函数:

foo();function foo() { 
console.log("hello");
}

在上面的代码中,如果你在函数创建之前使用函数,那么你会得到hello的输出。发生这种情况的原因是,作为语句创建的函数会当作一个整体被提升到执行上下文的顶部。

无论何时创建作为语句的函数,都可以在函数创建之前使用该函数。因此,如果你在第5行创建作为语句的函数,那么你可以在第1-4行中使用该函数,因为函数语句会随函数主体一起提升到执行上下文的顶部。

函数语句会随函数主体一起提升到执行上下文的顶部。

函数表达式会像一个变量一样被提升到执行上下文的顶部。请看下面的代码:

foo();var foo = function 
() {
console.log("hello");
}

你正在代码中创建函数foo作为表达式,所以JavaScript会像普通变量一样提升它。 JavaScript会像下图所示那样处理上面的代码:

宁波上元教育:轻松学习 JavaScript——第 5 部分:简化函数提升


正如你在上面的图片中看到的那样,foo在执行上下文的顶部被声明为一个变量,然而,在变量foo中的函数赋值发生在第6行,也就是创建作为表达式函数的地方。所以,当你尝试执行上面的代码时,你会得到错误undefined is not a function,如下图所示:

宁波上元教育:轻松学习 JavaScript——第 5 部分:简化函数提升


因此,你不能在函数表达式被创建之前使用函数表达式,因为只有函数声明会提升到顶部。

综上所述:

函数语句随函数主体一起被提升到执行上下文的顶部。你可以在函数创建之前使用作为语句创建的函数。

函数表达式在创建之前不能使用。只有声明部分会被提升,赋值发生在创建函数的那一行。

在“轻松学习JavaScript”系列的下一篇文章中,我们将介绍JavaScript中更为重要的概念,敬请期待。

上一篇: PLC的三个典型实例,你值得拥有 下一篇: 没有了
相关文章
 ·PLC的三个典型实例,你值得拥有
 ·JavaScript——第 3 部分:函数中的默认参数
 ·JVM学习(二)垃圾收集算法及Safe Point介绍
 ·JVM学习(一)Java运行时数据区域
 ·新品 | 西门子发布全新Simatic S7-1500 冗
 ·MySQL练习题及答案(三)
 ·宁波上元教育:做程序员真的很难吗
 ·宁波上元教育:给初学Java的宝贵部分知识点归纳
 ·宁波上元教育:技术负责人需要具备哪几个核心能力,你
 ·宁波上元教育:怎样学习PLC的应用指令
网上报名
姓名:  性别:
电话: 
地址:
课程:
最新课程 更多
 ·轻松学习 JavaScript——第 5 部分
 ·PLC的三个典型实例,你值得拥有
 ·JavaScript——第 3 部分:函数中的
 ·JVM学习(二)垃圾收集算法及Safe
 ·JVM学习(一)Java运行时数据区域
 ·新品 | 西门子发布全新Simatic S7-
 ·MySQL练习题及答案(三)
 ·Web前端工程师培训、Web前端开发培
 ·宁波上元教育:做程序员真的很难吗
 ·中间继电器的作用
推荐课程 更多
 ·轻松学习 JavaScript——第 5 部分
 ·PLC的三个典型实例,你值得拥有
 ·JavaScript——第 3 部分:函数中的
 ·JVM学习(二)垃圾收集算法及Safe
 ·JVM学习(一)Java运行时数据区域
 ·新品 | 西门子发布全新Simatic S7-
 ·MySQL练习题及答案(三)
 ·Web前端工程师培训、Web前端开发培
 ·宁波上元教育:做程序员真的很难吗
 ·中间继电器的作用
热门课程 更多
 ·轻松学习 JavaScript——第 5 部分
 ·PLC的三个典型实例,你值得拥有
 ·JavaScript——第 3 部分:函数中的
 ·JVM学习(二)垃圾收集算法及Safe
 ·JVM学习(一)Java运行时数据区域
 ·新品 | 西门子发布全新Simatic S7-
 ·MySQL练习题及答案(三)
 ·Web前端工程师培训、Web前端开发培
 ·宁波上元教育:做程序员真的很难吗
 ·中间继电器的作用
网站首页| 友情链接| 最新开课| 会计培训| 电脑培训| 外语培训| 建筑培训| 信息技术| 才艺培训| 职业资格| 关于我们| 网上报名| 网站地图| 后台管理
联系地址:宁波市海曙区中山东路137号7楼
联系电话:0574-87327805、87323725、87324192、87325693、87325823、87326973、87329343、87329353、87042056