• 变量提升(Hoisting)

    1. var: 使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它,这种行为称为Hoisting(提升)

    注意:变量赋值的位置不会改变

      function fn() {
    console.log(x) // -> undefined
    var x = 2
    }
    // 等同于:
    function fn() {
    var x // 变量提升到函数最顶部
    console.log(x)
    x = 2 // 赋值的位置不变
    }
    1. let/const: 使用 let/const 定义变量是存在块级作用域({...})的,它同样存在变量提升,但是由于有临时死区的概念,导致变量在未初始化的时候是不能够使用的(所以看上去是没有变量提升的)
      function fn() {
    console.log(x) // 报错 -> Cannot access 'name' before initialization
    // var -> let 使得 x 存在临时死区,在未初始化之前是无法被使用的
    let x = 2
    }
    // 正确方式
    function fn() {
    let x = 2 // 定义并初始化
    console.log(x) // -> 2
    }
  • 变量的作用域

    var:只存在函数作用域和全局作用域
      // 使用 var 在函数外部定义变量,会提升到全局作用域
    var globalA = c
    function fn() {
    if(true) {
    // 会在函数顶部定义 a = undefind, 所以在下方的console.log中能够正常输出
    // 这里其实是 a = 1 赋值的步骤
    var a = 1
    } console.log(a) // -> 1
    }

    const/let: 局部作用域({ ... })

      console.log(curA) // -> Cannot access 'curA' before initialization
    // 只能在初始化后才能使用 curA
    const curA = 'ccc'
    console.log(curA) // -> 'ccc'
    function fn() {
    if(true) {
    console.log(a) // a is not defined
    }
    let a = 1
    }

JavaScripts之变量作用域提升问题(var、let、const)的更多相关文章

  1. ES6和ES5变量声明的区别(var let const)

    // es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...

  2. js 函数和变量的提升

    js 函数和变量的提升 1. 函数的作用域: js中 ,函数的作用域为函数,而不是大括号. var hei = 123;if(true){ hei = 456;}console.log(hei);// ...

  3. javaScript的闭包 js变量作用域

    js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...

  4. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  5. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

  6. JS高级. 05 词法作用域、变量名提升、作用域链、闭包

    作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...

  7. js变量作用域--变量提升

    1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 var x; ...

  8. JavaScript 变量作用域和声明提升

    一.变量作用域 说到这个概念,不有自主的想到this,scope 这两个关键字. JavaScript的this总是指向一个明确的对象,这个对象是在执行的时候动态绑定的.通俗的说就是谁调用我,我的th ...

  9. javaScript 变量提升 var let const,以及JS 的解析阶段和执行阶段

    我们先来看一道面试题,大家猜想一下,下面这段代码,打印出来的结果是什么 var name = 'World!'; (function () { if (typeof name === 'undefin ...

随机推荐

  1. 【LeetCode】508. Most Frequent Subtree Sum 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. B. The Meeting Place Cannot Be Changed

    B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...

  3. hdu 1431 素数回文(暴力打表,埃托色尼筛法)

    这题开始想时,感觉给的范围5 <= a < b <= 100,000,000太大,开数组肯定爆内存,而且100000000也不敢循环,不超时你打我,反正我是不敢循环. 这题肯定得打表 ...

  4. iOS提交AppStore审核时:提示有其他支付并隐藏功能被拒的处理办法

    背景提示:数字类产品(比如购买会员等不需要配送实物的商品),Apple规定必须使用苹果IAP应用内支付,给Apple分成30%.打包的时候不要勾选微信或支付宝等其他支付方式.如果你提交的包里包含了微信 ...

  5. Capstone CS5213|HDMI转VGA|CS5213设计参考电路

    Capstone CS5213是一款HDMI到VGA转换器结合了HDMI输入接口和模拟RGB DAC输出且带支持片上音频数模转换器.CS5213芯片设计简单,整体芯片尺寸精悍,外围电路集成优化度较高, ...

  6. 从0开始手把手带你入门Vue3-全网最全(1.1w字)

    天命不足畏,祖宗不足法. --王安石 前言 本文并非标题党,而是实实在在的硬核文章,如果有想要学习Vue3的网友,可以大致的浏览一下本文,总体来说本篇博客涵盖了Vue3中绝大部分内容,包含常用的Com ...

  7. STM32新建模板之库文件

    一.新建项目文件夹 在桌面创建项目文件夹,用于存放工程,命名为"stm32f10x_project" 在项目文件夹中创建3个文件夹,分别命名为:CMSIS.OUTPUT.STM32 ...

  8. mysql 的 if 和 SQL server 的 iif

    在sql语句中,mysql 使用 if 而SQL server 使用iif 如 mysql : SELECT IF(1<2,'yes ','no'); sql server: SELECT II ...

  9. Module 4 - Azure SQL

    1)     Migrate AdventureWorks database from SQL Server instance to Azure SQL using DMA.2)     Update ...

  10. dispatcher-servlet.xml文件配置模板

    完整代码如下: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...