JavaScript学习笔记 - 提升
JavaScript代码在执行前会将所有的声明移动到各自作用域的最顶端,这个过程叫做提升。
1. 需要记住的几条规则:
函数声明优先提升,然后才是变量声明。
重复的变量声明会被忽略。
重复的函数声明,后面的声明会覆盖前面的声明。
let 和 const 声明的变量存在暂时性死区(temporal dead zone,简称 TDZ)
使用let或const命令声明变量之前,该变量都是不可用的。
2. 例子:
- 变量声明提升
console.log(bar) // undefined
var bar = 1
console.log(bar) // 1/*提升后*/var bar
console.log(bar)
bar = 1
复制代码
- 函数声明提升
foo() // fuck oriented object
function foo() {console.log('fuck oriented object')
}/*提升后*/function foo() {console.log('fuck oriented object')
}
foo()
复制代码
- 函数表达式提升
foo() // 报错 : foo is not a function
var foo = function () {console.log('fuck oriented object')
}/*提升后*/var foo
foo()
foo = function () {console.log('fuck oriented object')
}
复制代码
- 函数声明优先
foo() // fuck oriented object
var foo = 1
function foo() {console.log('fuck oriented object')
}
console.log(foo) // 1/*提升后*/
function foo() {console.log('fuck oriented object')
}
var foo
foo()
foo = 1
复制代码
- 重复的变量声明会被忽略
foo() // 2
var foo
function foo() {console.log(1)
}
foo = function () {console.log(2)
}/*提升后*/function foo() {console.log(1)
}
foo()
foo = function () {console.log(2)
}
复制代码
- 重复的函数声明,后面会覆盖前面的
fn() // 2
function fn() {console.log(1)
}
function fn() {console.log(2)
}
复制代码
- let 和 const 命令声明的变量存在暂时性死区
console.log(bar) // 报错 bar is not defined
const bar = 1
复制代码
console.log(foo) // 报错 foo is not defined
let foo = 2
复制代码
至于let和const声明的变量存不存在提升推荐看下这篇文章: 我用了两个月的时间才理解 let
转载于:https://juejin.im/post/5b90d202f265da0ab5035918
JavaScript学习笔记 - 提升相关推荐
- JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...
- JavaScript学习笔记(三)---事件、正则表达式、ES6、运动
JavaScript学习笔记(三)---事件.正则表达式.ES6.运动 27.insertbefore 28.滚动条及事件 29.事件及事件对象 30.鼠标事件对象的属性 31.案例:图片随鼠标移动 ...
- JavaScript学习笔记(一)-Learning Advanced JavaScript
JavaScript学习笔记 (一)- Learning Advanced JavaScript Learning Advanced JavaScript #2: Goal: To be able t ...
- JavaScript学习笔记一
JavaScript学习笔记 1. 介绍 2. 基础语法 输入输出 变量 数据类型 简单数据类型 复杂数据类型 类型转换 3. 运算 算术运算符 递增递减运算符 比较运算符 逻辑运算符 赋值运算符 运 ...
- 千锋JavaScript学习笔记
千锋JavaScript学习笔记 文章目录 千锋JavaScript学习笔记 写在前面 1. JS基础 1.1 变量 1.2 数据类型 1.3 数据类型转换 1.4 运算符 1.5 条件 1.6 循环 ...
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- JavaScript学习笔记(五)
JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型 内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...
- JavaScript学习笔记(备忘录)
JavaScript学习笔记(备忘录) ===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出fa ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
最新文章
- YOLO-v5训练自己的数据+TensorRT推理部署(2)
- day 05 python基础
- 使用SQLyog无法连接到MySQL,error code 2013
- eclipse报错:Failed to load the JNI shared library
- 24、HTML 属性
- mysql 图形插件_对我来说数据库图形化管理工具用这个足够了
- Java学习笔记--继承和多态(下)
- linux mxnet 编译,MXnet安装和编译
- P3085,jzoj3234-[USACO13OPEN]阴和阳【点分治】
- 从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
- 精通php7,PHP 7从入门到精通
- 子文件夹的权限统一于E盘的权限
- Asp.net中模仿Winform的MessageBox
- 怎样将Win10自带的Photos查看器的背景色改成白色?
- NCIE(国家网络工程师认证)
- 推荐几款非常好用且免费的在线绘图工具
- 评估模型都有哪些_培训效果评估的5个模型
- Debug: defusedxml, CV_LOAD_IMAGE_UNCHANGED,CV_IMWRITE_JPEG_QUALITY,undistortPoints
- 判断apk是否加固或混淆,Python + dex2jar-2.0实现方法
- Echarts字体和线条颜色设置操作笔记
热门文章
- 《梦断代码》阅读笔记之第0章和第1章
- 记一次复杂的正则匹配——匹配但不包含
- 在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错信息
- cvCloneImage()内存泄漏解决方法, cvCloneImage()和cvCopy()的区别
- 【Prison Break】第七天(4.3)
- Python利用Beautiful Soup抓取新闻标题
- 【LeetCode】【字符串】题号:*434. 字符串中的单词数
- C++排序算法——归并排序
- ENVI:There are no available ROls or EVFs associated with this input file.
- EXCEL 绘制斜线表头