js javascript变量提升
var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部) let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重复声明(报错has already been declared) const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改
<script>var a = 1;function fn() {console.log(a)//undefineda = 2;console.log(a)//2var a = 3;console.log(a)//3 }/* var声明变量提升到作用域顶部fn等价于 function fn() {var a;console.log(a)//undefineda = 2;console.log(a)a = 3;console.log(a)}*/function fn2() {//console.log(a)//a is not defined,let声明之前不能使用let a = 4;//let a = 5;//a has already been declared,在同一个作用域内let不能重复声明如果{let a=5;}就可以,{}内的let声明作用域只在{}有效console.log(a)//4 }function fn3() {console.log(a)//1a = 6;}fn();fn2();fn3();console.log(a);//6 </script>
还有以下例子,可以看出函数也存在提升一说:
<script>console.log(fn);//ƒ fn() {}var fn = 1;function fn() {}console.log(fn);//1/*函数提升,提升到作用域最前等价于var fn = undefined;function fn() {}console.log(fn);fn = 1;console.log(fn);*/ </script>
具体的提升可以参照:https://zhuanlan.zhihu.com/p/28140450
转载于:https://www.cnblogs.com/lcawen/p/8777630.html
js javascript变量提升相关推荐
- 深入理解js的变量提升和函数提升
一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: ...
- JavaScript 变量提升
JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 这几天在刷题的过程中 ...
- JavaScript变量提升
JavaScript变量提升 在JavaScript中变量声明与函数声明都会被提升到作用域顶部,优先级依次为: 函数声明 变量声明 变量赋值. 变量提升 var的变量提升 console.log(a) ...
- JavaScript变量提升机制
JavaScript变量提升机制 Js代码执行前(栈内存)还做了一件事那就是变量提升,Js会在所有var function等关键字的提前声明或者定义.. 看以下的代码: console.log(a); ...
- php变量 声明提升,JavaScript 变量提升
JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 以下两个实例将获得相 ...
- JS高级——变量提升
JS执行过程 1.首先是预解析:预解析过程最重要的是提升,在JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作 2.执行操作 全局中解析和执行 ...
- javascript变量提升/函数提升
首先 javascript 是一种弱类型.动态的.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类型检 ...
- javaScript变量提升以及函数提升
变量的声明赋值 var a = 1; 上面的代码先声明变量 a,然后在变量 a 与数值 1 之间建立引用关系,称为将数值 1 "赋值"给变量 a.以后,引用变量名 a 就会得到数值 ...
- 关于JS中变量提升的规则和原理的一点理解(一)
关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你 ...
最新文章
- Android NDK JNI 简单例子1 : Android NDK配置和下载
- 在一台Mac上不同平台同时使用多个Git账号
- Shiro集成Web时的Shiro JSP标签
- 外包程序员入职蚂蚁金服被质疑,网友:人生污点
- flex4 s:Datagrid s:typicalItem
- php把时间格式转换为时间戳,php如何将时间格式转换成时间戳?
- 随机效应估算与固定效应估算_一般混合线性模型固定效应、随机效应与另一随机向量的联合估计...
- mysql导出数据库对象命令_mysql数据库导出数据(命令)
- java button 圆角_UIButton具有渐变边框和圆角
- 微信小程序中带参数返回上一页的方法总结(三种)
- BroadcastChannel页面间通讯
- mysql 添加实例_如何在多实例基础上再添加一个mysql的实例
- ssl证书链的验证的其它方式
- 自己动手写一个业务实体生成器(1)
- MongoDB以Windows服务安装
- CrystalBall
- 原生js获取html根元素,JS获取屏幕高度的简单实现代码
- IIS-扩展接口ISAPI-Filter分析
- 项目做PC端页面采用rem适配的使用步骤
- 戴尔/外星人笔记本C盘空间占用疑难问题记录
热门文章
- 数组的最长平台c语言,2010台湾省C语言版高级
- 【Apache】 配置 (http协议的) vhost
- ajax 使用 JSONP 时,只能 GET 不能 POST
- Spring MVC 特性实现文件下载
- 【H2 Database】安装
- 如何配置php的ip地址吗,linux如何配置IP
- mysql bench建立一张表_使用MySQL Workbench建立数据库,建立新的表,向表中添加数据...
- oracle三种删除的区别,三种批量删除PLSQL写法效率的比对
- c语言一维数组课件,第9章:c语言一维数组课件
- toolchain安装教程支持_树莓派安装ESP8266_SDK开发环境