1.首先最常见的一种变量提升

console.log(a);   //输出 undefinedvar a=10;console.log(a)    // 输出  10

var 有提升的作用其实上面的代码会变成会变成

var a;console.log(a);   //输出 undefineda=10;    //赋值留在原地console.log(a)    // 输出  10

2.if语句中的 var

var  a=5;if(a==5){    //  if语句没有 语句块的作用  所以没有闭包的作用   这里的a是console.log(a);   //输出5var a=3;    //再 if语句中声明的变量 也是一个全局变量 所以这个a=3 会把前面的 5覆盖console.log(a);  //输出3}console.log(a);  //输出3

3.function的提升

     var a;function a(){console.log(123)};a();        //输出  123       再js中函数是第一公民  会比var声明的的变量更靠前 var a;function a(){console.log(123)};function a(){console.log(456)}a();   //输出  456      再js中函数是第一公民  后面的 a函数把前面的

覆盖  js只会存在一个同名变量      函数声明的变量是以一个地址的形式存储在内存中  同时 js中如果已经存在 一个同名的变量且已经赋值  在重新定义的没有赋值的变量 就会跳过初始化阶段

      function a(){console.log(123)};function a(){console.log(456)}var a=10;a();        //输入引用错误  a不是一个函数      这个时候又定义了一个a变量 会把前面同名的函数给覆盖掉  js是弱数据类型 这个时候 a就变成了一个number类型 所以 报出了 a不是一个函数

4.function  和 var 的 一起使用

var  b=10;function a(){       //函数具有局部作用域的效果 所以内部和外面的全局作用不通  console.log(b);   //输出undefinedvar b=8;                        console.log(b); //输出  8}a();   //记住函数只有调用才有用 别忘了调用console.log(b);  //输出  10

5.if语句

if (!("a" in window)) {var a = 1;};alert(a);上面的语句相当于var a;if (!("a" in window)) {    //判断 a是否在全局变量中  如果不再则会将 a赋值 1     大家记住在 if语句中 var声明的变量 也是一个全局a = 1;                  // 变量 ,而并不会 在一这个条件是否成立   js在执行程序之前 会首先把在全局中用var 声明的变量提前};alert(a);   // 弹出 undefined

6.练习    下面这个难度有点大 是一个es6的闭包的知识 答案我就不公布 闭包作用就是利用了函数作用域和外部不通的原理防止全局污染

var name="world";(function(){console.log(name)if(typeof name==="undefined"){var name="jack";console.log("goodbye "+name)}else{console.log("hello "+name)}}())

7. 还有一种特殊情况  感兴趣的童鞋可以去了解下哈  就是 es6新增的块级作用域 中的 函数提升

var a = 100;{a = 10;function a() {}a = 20;
}console.log(a)

块级作用域中的函数提升 类似于 var 但是 和var 又不全一样

块级作用域中的函数提升 只是提升到  块级作用域的顶部  但 并不是立即映射到全局  这个也是为啥那个全局中的a发生了变化   当这个声明语句走完 才正式在块级作用域中生效

关注我 持续更新 前端知识

浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升相关推荐

  1. ES6中块级作用域下的函数声明

    背景 因为ES5的时候没有块级作用域,所以ES5规定不能再if这样的块中声明函数,但是为了兼容各大浏览器并没有严格遵守这条规定. ES6的时候引入了块级作用域,规定在块级作用域中声明函数就相当于使用l ...

  2. js模仿块级作用域(js没有块级作用域私有作用域)

    js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函 ...

  3. let、const和var的区别(涉及块级作用域)

    let .const和var的区别 let.const.var在js中都是用于声明变量的,在没有进行ES6的学习前,我基本只会使用到var关键字进行变量的声明,但在了解了ES6之后就涉及到了块级作用域 ...

  4. 详解var、let、const关键词声明变量的区别,以及变量提升、块级作用域的认识等。

    首先回顾一下JavaScript中var声明变量的基础知识: • 在使用var关键词声明变量时,变量在函数外则是全局变量,有全局作用域,全局变量在页面关闭后销毁:变量在函数内则是局部变量,作用局部作用 ...

  5. 你真的懂switch吗?聊聊switch语句中的块级作用域

      最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用 ...

  6. c语言switch的作用域,你真的懂switch吗?聊聊switch语句中的块级作用域

    最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用域可 ...

  7. 浅谈JS中常见的问题(三)

    往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...

  8. php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  9. 浅谈 js 数字格式类型

    原文:浅谈 js 数字格式类型 很多人也许只知道 123,123.456,0xff 之类的数字格式. 其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有 ...

最新文章

  1. IE兼容问题IE6,IE7,IE8,IE9,IE10
  2. 在开课吧学python的经历-28岁,年薪30万,工作5年,被裁掉只用了5分钟
  3. 共享卫士2.0版设置说明
  4. QLocalServer和QLocalSocket单进程和进程通信
  5. 运行效果演示-修改applcation-db.xml 文件
  6. WinCE中中断的处理过程(驱动开发人员角度)
  7. 如何把VS Code打造成Java开发IDE?
  8. [代码阅读] ECS toString实现方法
  9. golang中文文档_【译】Go 语言源码贡献官方指导文档
  10. 【职业生涯】这样的开发人员每个团队都想要
  11. 用babel cli编译用ES6写的JSX
  12. 告别抠图!海量免抠PNG,任你选
  13. android 灰色向白色渐变,iPhone-iOS的白色到透明渐变层为灰色
  14. primefaces教程_Primefaces仪表板组件示例教程
  15. robo 3t使用教程
  16. 小心 transmittable-thread-local 的这个坑
  17. oracle判断除数为零,Oracle decode函数 除数为零
  18. 全网疯传!最新高频100题汇总(附答案详解)
  19. 英语作文计算机的利弊,电脑游戏的坏处英语作文
  20. react中input输入框显示字数

热门文章

  1. Arduino项目实战——基于Arduino【智能垃圾桶】设计
  2. mldonkey——Linux下的电驴
  3. adb修改华为盒子的 value 和 name
  4. 交错式影像与渐进式影像
  5. 如何用计算机连接蓝牙设备管理器,蓝牙配置选项允许Bluetooth设备连接到此计算机不可用解决方法-win7蓝牙怎么打开...
  6. 忘了捕获异常~~~~~~~~`
  7. 2021年安全员-C证试题及解析及安全员-C证复审考试
  8. 3个算法 - 口算难题
  9. JAVA+MYSQL 实现学生信息管理系统
  10. Java H5支付宝付款接口_支付宝H5开放文档