js中的函数提升和变量提升
2024-09-07 07:22:24
变量提升和函数提升:
就是将变量声明或者函数全部代码提升到当前作用域(全局作用域或函数作用域)最开始的部分。
JavaScript中函数域为最小域范围;for循环、while循环、if语句、switch语句的“{}”不是作用域。
一.变量提升:
使用var声明的变量,会提前到当前作用域的开始的位置,被声明。原位赋值。
1.所指的形式:var a = "提升";(必须有关键字“var”)
2.提升的方式:将“var a”,提升到当前作用域的顶部,a = "提升",在原型定义的位置。
3.具体代码:
eg:
1. console.log( a) ----> undefined
var a = 10;
console.log(a) ----> 10
2.console.log(a);
var a = "我是全局中的变量";
console.log(a);
function fn(){
console.log(interiorA);
var interiorA = "我是函数内的变量";
console.log(interiorA)
}
fn();
↓↓↓↓↓↓↓↓
变量提升执行顺序
var a ; //变量提升,此时只是声明,并没有赋值
console.log(a); // undefined
a = "我是全局中的变量" // 此时才赋值
console.log(a); //我是全局中的变量
function fn() {
var interiorA; //变量提升,函数作用域范围内
console.log(interiorA); //undefined
interiorA = "我是函数内的变量" //此时对局部变量进行赋值
console.log(interiorA) //我是函数内的变量
}
二.函数提升
1.函数提升所指的形式:function fn(){......}(必须是函数声明的形式,不能是函数表达式的形式)。
2.函数提升的方式:将“function fn(){......}”整个函数声明代码块提升到当前作用域的顶部,
原先位置以不存在该代码。
3.所有使用function声明的函数,都会整体提升,只要当前作用域内声明了数
在任何位置都可以使用,赋值式创建函数,提升的声明,不是。
当函数和变量重名,变量的提升更高,函数的提升在变量的下面,
导致值函数生效
var a;
function a(){}
console.log(a);
a = 10;
eg:
function fn(){
console.log(a);
var a = "hello";
console,log(a);
function a(){1}
console.log(a);
a = "world";
console.log(a);
function a(){2}
cosole.log(a)
}
上式提升后等同于下式
function fn(){
var a; 变量提升最高;
function a(){1}; 函数提升到变量下面;
function a(){2};
console.log(a); f2
a = "hello"
console.log(a); hello
console.log(a); hello
a = "world"
console.log(a) world
console.log(a) world
}
最新文章
- JDK Collection 源码分析(2)—— List
- salesforce 零基础学习(四十一)Group
- [Leetcode] Palindrome Partitioning
- Excel应该这么玩——0、初衷:用IT方法玩Excel
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分
- read 不回显的方法
- bitmap的实现方法
- Android studio 删除Module、project
- PYTHON 获取机器硬件信息及状态
- CSS Positioning(定位)
- linux source命令与export命令的区别
- CF592D Super M
- echarts 中国地图 数据自动提示
- windows yii2 配置redis
- Hdoj 1846.Brave Game 题解
- js基础学习
- Some untracked working tree files would be overwritten by checkout. 		Please move or remove them before you can checkout. View them
- codeforces gym 100971 K Palindromization 思路
- Dubbo简介---搭建一个最简单的Demo框架
- matlab:eval用法
热门文章
- SQL-W3School-基础:SQL UPDATE 语句
- Splinter自动登录
- centos7 更改ip
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类
- PostgreSql 使用自定义序列(Sequence)向表插入数据
- 一步一步搭建Nuget私服
- delphi 中如何从数据库中读取数据自生成TreeView,只有两个字段,数据库结构如下。急急!!
- 阿里云服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题
- 利用工具破解HTTP身份验证的多种方法
- Css3 伪元素