JS变量提升和函数提升的顺序
1.变量的提升:
变量名会提升到 ‘当前作用域’ 顶部,此时该变量为undefined,未赋值,赋值是在js原位置。
console.log(a); // undefined
var a = 10
console.log(a) // 10
在js解析之后:
var a;
console.log(a); // undefined
a = 10
console.log(a); //10
2.函数的提升
A.js函数的类别:
- 函数声明:function a( ){ };
- 函数表达式:var a = function( ){ };
- 匿名函数:function( ){ };
- 立即执行函数:(function(str){ })(str)
其中:
函数声明存在函数提升
函数表达式等价于变量提升
a();function a(){console.log("a");
};
在解析之后相当于
function a(){console.log("a");
}
a(); // "a"
但是注意函数表达式和上述的函数声明的代码提示方式又不一样了
3.变量提升和函数提升优先级:
A.函数提升优先级高于变量提升
B.当函数声明与变量名相同时,在变量赋值前,函数声明依旧是函数声明,不会被覆盖;当变量赋值后,函数声明被同变量覆盖。
console.log(a); // ƒ a(){ console.log("函数a"); }
function a(){console.log("函数a");
};
a(); // '函数a'
var a = "变量a";
console.log(a); // '变量a'
a(); // a is not a function// 输出结果及顺序:
// ƒ a(){ console.log("函数a"); }
// '函数a'
// '变量a'
// a is not a function
函数解析之后相当于:
function a(){console.log("函数a");
};
var a;console.log(a); // ƒ a(){ console.log("函数a"); }
a(); // '函数a'a = "变量a"; // 此时变量a赋值,函数声明被覆盖console.log(a); // "变量a"
a(); // a is not a function
JS变量提升和函数提升的顺序相关推荐
- js中的变量提升和函数提升——精炼版
javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...
- JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...
- js 变量提升与函数提升
规则: 函数的提升优先于变量提升.同名的函数会覆盖同名的函数与变量.同名的变量不会覆盖同名的函数. 示例代码1: <!DOCTYPE html> <html lang="z ...
- JS变量(声明)提升和函数声明提升
目录 一.概念理解 1.变量声明提升 2.函数声明提升(又叫函数提升) 变量提升和函数提升的优先级 小结: 一.概念理解 变量提升:在当前作用于中,js代码自上而下执行之前,浏览器会把所有带var/f ...
- js高级第一章--变量提升,函数提升
js高级第一章–变量提升,函数提升 文章目录 前言 一.什么是js里的提升? 二.js变量提升 三.js函数提升 四.特殊情况 总结 前言 在js中,最基本的声明方式有三种,即:var,let,con ...
- JavaScript系列文章:变量提升和函数提升
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...
- 变量提升以及函数提升
目录 例子 变量提升 函数提升 当函数提升遇到变量提升 例子 function a(){var b = 10function b(){}console.log(b) } a() 结果是10 funct ...
- 函数的自执行,变量提升和函数提升
其实之前虽然刚开始学习JavaScript的时候经常看到function add(){}.var add=function(){}.function(){}之类的这种写法,但是具体是什么叫什么却没有 ...
- JS中的变量提升和函数提升
console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...
最新文章
- 在Ubuntu18.04上安装opencv 3.4.1
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(单色填充、分组颜色填充)实战
- 特斯拉2019年第二季度财报出炉:今年有望降低汽车售价
- 正则表达式之常用量词
- 布局优化之ViewStub、Include、merge使用分析
- sqlserver 2000 安装后本机如何连接_3030铝型材框架上的角槽连接件是如何安装固定的?...
- sql server 2012序列号密钥
- 10-20210308华为海思Hi3516DV300在鸿蒙系统下测试网络(以太网+WIFI)
- 爱情 何为爱情(搜集)
- unity应用实例——从头撸一个全新的FPS游戏(5)
- 大学计算机应用基础绩点,出国留学如何计算GPA平均分
- 当你在浏览器地址栏中输入地址并回车的一瞬间到页面展示回来,经历了什么?
- 编码、字符集编码、UTF8mb3/UTF8mb4
- 计算机毕业设计之家庭理财管理系统的设计与实现
- 手把手带你安装PyTorch指定版本嘿!
- 测试吃鸡游戏帧数软件,帧数猛提!新旧版本《绝地求生》实测
- 前端参数用MD5加密
- D53 LeetCode 587.安装栅栏(困难)
- 软考中级,哪个通过率高且简单?
- 【独家】彩虹代shua最新6.6版本/免授权/后台同步官方版本升级
热门文章
- 百度关键词抓取工具_百度网站关键词最蜘蛛快排 - 关于网站网站死链
- 65位高校教师接龙晒工资,给打算入高校的博士们参考!
- php正则 网址,php正则表达式匹配URL中的域名
- win7codecs+2.7.×高清完美设置
- Autodesk2012 安装方法(最全密钥及序列号)
- 美国科学家团队在半导体芯片上展示分子电子传感器
- 网络 网速计算 mbps和mb/s怎么换算结论:8Mbps(8 Million bits) = 1MB/s (1 Million Byte)
- Redis 面试全攻略、面试题大集合
- JavaSE——Java比较器
- 为什么你的网红营销没效果~