当前位置:网站首页>函数提升和变量提升
函数提升和变量提升
2022-08-02 03:22:00 【小茹想睡觉】
我们先看两个相似的代码
a = 2;
var a ;
console.log(a);
console.log(a);
var a = 2;
第一个输出的是2
第二个输出值为underfined
大家可能为会好奇这是为什么呢?
下面我们来研究一下
这是因为变量和函数在内的所有声明都会在任何代码被执行前首先被处理
所以第一个代码实际上是这样处理的
var a;
a = 2;
console.log(a);
第二个代码是这样处理的
var a ;
console.log(a);
a = 2;
这个过程就好像变量和函数声明从它们在代码中出现的位置被“移动”到了最上面。这个过程就叫做提升
注意:只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。如果提升改变了代码执行的顺序,会造成非常严重的破坏。函数声明可以提升,函数表达式不可以提升,
函数优先
函数声明和变量声明都会被提升,但是在重复声明的代码中函数会首先被提升,然后才是变量
foo();//1
var foo;
function foo() {
console.log(1);
}
foo = function() {
console.log(2);
}
这个会输出1而不是2,这段代码会被引擎理解成下面格式
function foo(){
console.log(1);
}
foo(); // 1
foo = function(){
console.log(2);
}
这里var foo尽管出现在function foo()......的声明之前,但是因为它是重复的声明(因此被忽略了)因为当有重复声明时,函数声明会优先于变量声明被提升。
边栏推荐
猜你喜欢
mysql8.0安装教程与配置(最详细)操作简单
@Configuration详解
parser = argparse.ArgumentParser()解析
[Basic Tutorial of Remote Control Development 1] Crazy Shell Open Source Formation Drone-GPIO (Remote Control Indicator Light Control)
C语言 十六进制整数字符串转十进制整数
MySQL分组后取最大一条数据【最优解】
Cloud server installation and deployment of Nacos 2.0.4 version
ModuleNotFoundError No module named 'xxx' possible solutions
DSPE-PEG-DBCO Phospholipid-Polyethylene Glycol-Dibenzocyclooctyne A Linear Heterobifunctional Pegylation Reagent
parser = argparse.ArgumentParser() parsing
随机推荐
MySql创建数据表
C语言 十六进制整数字符串转十进制整数
MySQL8.0安装教程,在Linux环境安装MySQL8.0教程,最新教程 超详细
Redis简单学习笔记
【博学谷学习记录】超强总结,用心分享 | 软件测试 接口测试基础
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
MySQL两阶段提交串讲
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
磷脂-聚乙二醇-酰肼,DSPE-PEG-Hydrazide,DSPE-PEG-HZ,MW:5000
MySQL分库分表
mysql卸载详细教程
Amazon sellers how to improve the conversion
通过PS 2021 将网页图标抠下来
动态代理工具类
第一篇博客
云服务器安装部署Nacos2.0.4版本
【 application 】 life many years of operations, what turned scored 12 k + annual bonus salary?
排序学习笔记(二)堆排序
getattr() function analysis
一个结构体 = 另一个结构体(同类型结构体之间可直接赋值操作)