美文网首页
浅谈变量提升

浅谈变量提升

作者: 明月半倚深秋_f45e | 来源:发表于2019-11-15 09:16 被阅读0次

变量提升是面试中非常常见的一个问题

比如 var 和 let 的区别是什么?
答案之一就有 let 不会变量提升

1.概念

最基础的概念大家都知道

console.log(a);
var a = 1;
// 输出 undefined

在代码中 使用 var 来声明变量的时候,会提到当前作用域的顶端,而赋值操作在原处不变
上面的两行代码相当于

var a;
console.log(a);
a = 1;

var a声明向上提升,a=1赋值留在原处

2.多个script的情况

<script>
console.log(a)
</script>
<script>
var a = 1;
</script>
// 控制台报错 ReferenceError: a is not defined

这样控制台就报错了
变量提升不能跨script

3.其它情况

首先看不用var直接赋值

console.log(a);  //ReferenceError: a is not defined
a = 1;

同样报错,因为使用 var才会变量提升(我所知)
在 if 中

console.log(a) // undifined
if(false){
var a = 1;
}

尽管 if 不通过,还是提升了

4.函数提升

变量声明会提示,函数声明也会

console.log(foo);
var foo=10;
console.log(foo);
function foo(){
}
console.log(foo);
//输出 function a,10,10

函数会优先于变量 先提升
上面代码相当于

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

但是,如果用函数表达式,那就只提升了这个 a变量,符合之前的变量提升的逻辑

   a();
    var a = function () {
      console.log(1)
    }
//TypeError: a is not a function

5.类

我们es6的class可以声明一个类

let a = new A()  // 报错
class A {
}

类声明是不会提升的

相关文章

  • 浅谈变量提升

    变量提升是面试中非常常见的一个问题 比如 var 和 let 的区别是什么?答案之一就有 let 不会变量提升 1...

  • iOSer:浅谈开发中提升工作效率的姿势

    iOSer:浅谈开发中提升工作效率的姿势 iOSer:浅谈开发中提升工作效率的姿势

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

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

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • java基础知识—面向对象和继承

    java基础知识—面向对象和继承 一、变量 静态变量 成员变量 局部变量 详情可见 浅谈Java变量。 二、修饰符...

  • 变量提升问题

    这是 变量提升问题 1. 变量提升, 很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只...

  • JavaScript__变量声明提升(Hoisting)

    摘取:http://www.jb51.net/article/30719.htm 变量提升 变量提升就是把变量提升...

  • var,let,const 的区别

    变量提升 变量提升即将变量声明提升到它所在作用域最前面,而且仅仅是提升变量,不会提升所赋的值 执行流程 作用域 在...

  • 执行上下文和执行上下文栈

    一、变量提升和函数提升 首先回顾一下什么是变量提升。 变量声明提升,通过var定义(声明)的变量,在定义语句之前就...

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

网友评论

      本文标题:浅谈变量提升

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