阅读量:2
文章目录
发现宝藏
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
变量提升(Hoisting)是 JavaScript 中一个重要的概念,它涉及到变量和函数的声明在代码执行过程中的处理方式。以下是对变量提升的详细解释:
变量提升的定义
变量提升是指在 JavaScript 代码执行前,变量和函数的声明会被移动到它们所在作用域的顶部。需要注意的是,只有声明本身会被提升,而赋值或其他运行逻辑则会留在原地。
变量提升的类型
- 变量声明提升:
- 使用
var
关键字声明的变量会在代码执行前被提升到其作用域的顶部,但不会赋值,默认值为undefined
。 let
和const
声明的变量不存在变量提升,它们在声明之前不可访问,这被称为暂时性死区。
- 使用
- 函数声明提升:
- 使用
function
关键字声明的函数,其声明和定义都会被提升到作用域的顶部,可以在声明之前被调用。 - 函数表达式(如
var fn = function() {...};
)的声明不会被提升,只有变量声明会被提升。
- 使用
变量提升的示例
考虑以下代码:
console.log(a); // 输出:undefined var a = 2;
在这个例子中,虽然 var a = 2;
在 console.log(a);
之后,但是由于变量提升,a
的声明实际上被提升到了作用域的顶部。因此,上述代码的实际执行顺序如下:
var a; // 声明被提升 console.log(a); // 输出:undefined a = 2; // 赋值留在原地
函数声明提升的示例
zxx(); // 输出:'zxx is a great girl' function zxx() { console.log('zxx is a great girl'); }
在这个例子中,function zxx() {...}
的声明和定义都被提升到了作用域的顶部,所以可以在声明之前调用 zxx()
。
注意事项
- 变量提升只发生在同一个作用域内,不同作用域的变量不会相互影响。
- 函数声明提升的优先级高于变量声明提升。