浅谈变量提升

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

比如 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 {
}

类声明是不会提升的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容