javascript核心技术(十六)变量与函数声明的自动提升效果

[复制链接]
查看: 1504|回复: 31
发表于 2023-1-22 21:18:05 | 显示全部楼层 | 阅读模式
我们先看以下代码:

console.log(num);//很显然,我们在输出num时,num还没有声明
var num = 200;//这里才声明了num


大家可以猜一下,执行后会输出什么呢?
答案是:会输出undefined。

为什么呢?

因为以上两行代码的执行过程如下:
var num; //js会自动将num的声明提前
console.log(num);//由于
num = 200;

javascript核心技术(十六)变量与函数声明的自动提升效果


由于num已声明未赋值,所以输出undefined。
之前我们在讲基本数据类型时曾讲过,undefined表示已定义未赋值。

下面我们再看一下函数中的变量是否同样有这样的自动将声明提升的效果

function fn(){
    console.log(num); // undefined
    var num = 200;
}
fn();

// 注意函数中的变量提升,只是提升到函数作用域的最前面
console.log(num); //所以这里会报错,因为函数外部并不存在一个num的变量



javascript核心技术(十六)变量与函数声明的自动提升效果


下面再看一下函数的声明是否同样具有自动提升的效果
fn();
function fn(){
    console.log(300);
}

输出结果为300,可见函数的声明同样会自动提升

但是,请注意:用表达式方式声明的函数,没有自动提升效果,如下:

console.log(f1);
f1();
var f1 = function(){
    console.log(400);
}

javascript核心技术(十六)变量与函数声明的自动提升效果

可以看到,先输出undefined,因为f1是一个变量,js会将变量的声明自动提升到最前面,所以第一条输出语句的f1是已定义为赋值,为undefined。
第二条语句为f1(),此时的f1只是一个普通变量,并非函数,所以报错。

真正的执行顺序如下:
var f1;
f1(); //报错 f1不是一个函数
f1 = function(){
    console.log(400);
}


所以总结如下:
  1. 变量的声明会提前,赋值不会提前。
  2. 变量的提升,是将变量的声明提升到当前作用域的最前面。
  3. 函数的声明同样具有自动提升效果,我们将其称之为函数的预加载,但通过表达式声明的函数没有预加载效果。
  4. 虽然变量具有自动提升效果,但不推荐变量先使用后声明。
复制代码
ok,以上就是关于变量与函数声明的自动提升效果的讲解,请大家务必认真理解以上逻辑。


易博软件介绍

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-2-15 05:10:57 | 显示全部楼层
如梦初醒,衷心感谢!!!!!!

0

主题

15

帖子

8

积分

年费会员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
8
发表于 2023-2-26 08:41:28 | 显示全部楼层
^真是厉害啊  谢谢你的点悟

0

主题

15

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-3-9 02:03:27 | 显示全部楼层
从大体上说,我也可以算的上一个初级程序员吧,学的语言很多,不过都不是很精,软件工程学的一点都不好,大部分原因是在学校和老师,谁让我们在这样的垃圾学校拉,不过,我在c和vb上有一点基础,可以这样说,我在学校还可以吧,不过看了你的帖子,我感到我真的不行。    以后希望大家在c和vb和单片机的c51方面多说说,谢谢!

0

主题

13

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-3-19 23:44:22 | 显示全部楼层
^学习

3

主题

228

帖子

120

积分

营销菜鸟

Rank: 3Rank: 3

积分
120
发表于 2023-3-26 13:47:09 | 显示全部楼层
你写出了所有编程序人的心声  很好  我很受用  ~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~  @@@@@@@@@@^^
发表于 2023-4-1 18:07:35 | 显示全部楼层
谢谢您的提醒。我好象也在犯你的错误

0

主题

17

帖子

9

积分

营销入门

Rank: 2

积分
9
发表于 2023-4-6 13:12:36 | 显示全部楼层
谢谢你的经验。  非常感谢!

0

主题

22

帖子

12

积分

营销入门

Rank: 2

积分
12
发表于 2023-4-11 16:08:57 | 显示全部楼层
很有感悟 好文章

0

主题

6

帖子

3

积分

营销入门

Rank: 2

积分
3
发表于 2023-4-16 08:07:35 | 显示全部楼层
就像楼上说的那样,我也不知道自己是第几个回帖的,但是看了这篇文章后我没有办法不让自己回,是啊,我今年大2了,很多同学说编程难,都去学网页什么的了,而我却一早把自己出卖给了编程,我学的是C/C++,真的很难,不过我仍然在坚持,我也不知道前途会怎样,我只知道做自己最想做的事,就好了,很开心认识大家!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表