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变量提升相关推荐

  1. 深入理解js的变量提升和函数提升

    一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: ...

  2. JavaScript 变量提升

    JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 这几天在刷题的过程中 ...

  3. JavaScript变量提升

    JavaScript变量提升 在JavaScript中变量声明与函数声明都会被提升到作用域顶部,优先级依次为: 函数声明 变量声明 变量赋值. 变量提升 var的变量提升 console.log(a) ...

  4. JavaScript变量提升机制

    JavaScript变量提升机制 Js代码执行前(栈内存)还做了一件事那就是变量提升,Js会在所有var function等关键字的提前声明或者定义.. 看以下的代码: console.log(a); ...

  5. php变量 声明提升,JavaScript 变量提升

    JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 以下两个实例将获得相 ...

  6. JS高级——变量提升

    JS执行过程 1.首先是预解析:预解析过程最重要的是提升,在JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作 2.执行操作 全局中解析和执行 ...

  7. javascript变量提升/函数提升

    首先 javascript 是一种弱类型.动态的.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类型检 ...

  8. javaScript变量提升以及函数提升

    变量的声明赋值 var a = 1; 上面的代码先声明变量 a,然后在变量 a 与数值 1 之间建立引用关系,称为将数值 1 "赋值"给变量 a.以后,引用变量名 a 就会得到数值 ...

  9. 关于JS中变量提升的规则和原理的一点理解(一)

        关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你 ...

最新文章

  1. Android NDK JNI 简单例子1 : Android NDK配置和下载
  2. 在一台Mac上不同平台同时使用多个Git账号
  3. Shiro集成Web时的Shiro JSP标签
  4. 外包程序员入职蚂蚁金服被质疑,网友:人生污点
  5. flex4 s:Datagrid s:typicalItem
  6. php把时间格式转换为时间戳,php如何将时间格式转换成时间戳?
  7. 随机效应估算与固定效应估算_一般混合线性模型固定效应、随机效应与另一随机向量的联合估计...
  8. mysql导出数据库对象命令_mysql数据库导出数据(命令)
  9. java button 圆角_UIButton具有渐变边框和圆角
  10. 微信小程序中带参数返回上一页的方法总结(三种)
  11. BroadcastChannel页面间通讯
  12. mysql 添加实例_如何在多实例基础上再添加一个mysql的实例
  13. ssl证书链的验证的其它方式
  14. 自己动手写一个业务实体生成器(1)
  15. MongoDB以Windows服务安装
  16. CrystalBall
  17. 原生js获取html根元素,JS获取屏幕高度的简单实现代码
  18. IIS-扩展接口ISAPI-Filter分析
  19. 项目做PC端页面采用rem适配的使用步骤
  20. 戴尔/外星人笔记本C盘空间占用疑难问题记录

热门文章

  1. 数组的最长平台c语言,2010台湾省C语言版高级
  2. 【Apache】 配置 (http协议的) vhost
  3. ajax 使用 JSONP 时,只能 GET 不能 POST
  4. Spring MVC 特性实现文件下载
  5. 【H2 Database】安装
  6. 如何配置php的ip地址吗,linux如何配置IP
  7. mysql bench建立一张表_使用MySQL Workbench建立数据库,建立新的表,向表中添加数据...
  8. oracle三种删除的区别,三种批量删除PLSQL写法效率的比对
  9. c语言一维数组课件,第9章:c语言一维数组课件
  10. toolchain安装教程支持_树莓派安装ESP8266_SDK开发环境