美文网首页
关于变量提升

关于变量提升

作者: Eileen_1d88 | 来源:发表于2019-10-22 23:33 被阅读0次

一般被问到var和let的区别的时候,我都会说var会有变量提升,let没有变量提升。那么这样一段代码,让我对这个答案产生了疑问:

var a = 1;
(function() {
  console.log(a);
  let a = 2
})()

结果是报错,如果let没有变量提升的话,那么a应该是1,为什么会报错呢?

参考这篇文章,觉得讲得很清楚,这里只是自己做一下知识记录。

变量提升会经历创建、初始化、赋值3个过程。
var创建一个变量会经历【创建、初始化】过程;
let创建一个变量会经历【创建】过程;
function会经历【创建、初始化、赋值】过程;
因为function一定会被赋值,所以

function a() {
};
var a = 1;
console.log(typeof a) // 输出 number

let声明的变量只会创建一次,所以

function a() {
};
let a = 1;
console.log(typeof a) // Uncaught SyntaxError: Identifier 'a' has already been declared

const和let差不多, 但是const没有不能被赋值,类似const x = 1;是创建和初始化过程。
这样就比较能理解暂时性死区(TDZ)了;在一个块作用域中,一个变量在声明之前使用,该变量只经历了创建阶段,没有初始化,也没有赋值,所以变量没有值,那么这个时候使用这个变量,自然就会报错了。

相关文章

  • 关于变量提升

    一般被问到var和let的区别的时候,我都会说var会有变量提升,let没有变量提升。那么这样一段代码,让我对这个...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • 关于js变量提升

    首先我们先来看一道题: var tmp = new Date(); function f() { console....

  • var关于变量提升

    输出结果 JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结...

  • ES6相关

    关于变量提升 var 创建、初始化 被提升 let、const 创建 被提升 function 创建、初始化、赋值...

  • JS 复习笔记

    关于变量提升 使用关键字给变量赋值可以分为三个阶段: 创建 变量,在内存中开辟空间 **初始化 **变量,将变量初...

  • javascript修炼之路(一) ------变量提升

    关于变量的定义、声明方式、赋值这里就不介绍了,主要说说javascript 中变量的提升。 初识...

  • ES6——let 和 const 命令

    1.关于JS变量提升的一些坑 1.1变量 1)函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部2)...

  • 浅析关于 JS 作用域的几个高频知识点

    闭包 词法作用域 变量提升 变量提升 什么是变量提升 顾名思义,变量提升指的是,在声明变量的时候,变量的声明位置会...

  • 深入浅析var,let,const的异同点

    一、let和var区别 1.关于变量提升,var能变量提升,let不能 2.暂时性死区:块级作用域内存在let命令...

网友评论

      本文标题:关于变量提升

      本文链接:https://www.haomeiwen.com/subject/nllcvctx.html