JavaScript的变量提升与函数提升

这篇具有很好参考价值的文章主要介绍了JavaScript的变量提升与函数提升。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JavaScript 中存在变量提升和函数提升,它们是由 JavaScript 解释器在代码执行之前进行的一种行为。

最新的 ECMAScript 标准定义了 8 种数据类型:

  • 七种基本数据类型:
    • 布尔值(Boolean),有 2 个值分别是:true 和 false
    • null,一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,因此 null 与 NullNULL或变体完全不同。
    • undefined,和 null 一样是一个特殊的关键字,undefined 表示变量未赋值时的属性。
    • 数字(Number),整数或浮点数,例如: 42 或者 3.14159
    • 任意精度的整数(BigInt),可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
    • 字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy"
    • 代表(Symbol,在 ECMAScript 6 中新添加的类型)。一种实例是唯一且不可改变的数据类型。
  • 以及对象(Object)。

变量提升:

在 JavaScript 中,使用 var 声明的变量会被提升到其所在作用域的顶部。这意味着可以在变量声明之前引用变量,而不会导致 ReferenceError。

console.log(x); // 输出: undefined
var x = 5;
console.log(x); // 输出: 5

实际上,上述代码在执行时会被解释器处理成如下形式:

var x;
console.log(x); // 输出: undefined
x = 5;
console.log(x); // 输出: 5

值得注意的是,变量提升只提升声明,而不提升赋值。变量的初始化赋值仍然保留在原始位置。

函数提升:

在 JavaScript 中,使用 function 声明的函数会被整体提升到其所在作用域的顶部。这意味着可以在函数声明之前调用函数,而不会导致 ReferenceError。

sayHello(); // 输出: "Hello!"
function sayHello() {
  console.log("Hello!");
}

实际上,上述代码在执行时会被解释器处理成如下形式:

function sayHello() {
  console.log("Hello!");
}
sayHello(); // 输出: "Hello!"

与变量提升类似,函数提升也只提升声明,不提升具体的函数实现。因此,在函数声明之前调用函数是有效的。文章来源地址https://www.toymoban.com/news/detail-802574.html

进阶:

  • 使用 letconst 声明的变量也存在提升,但它们不会被初始化为 undefined,而是保持在 "暂时性死区"(Temporal Dead Zone,TDZ)中。
console.log(x); // Uncaught ReferenceError: Cannot access 'x' before initialization
let x = 3;
  • 函数表达式(使用 varlet、或 const 声明的函数)的提升行为与函数声明略有不同,它们会被提升,但初始化的赋值不会提升。
    baz(); // Uncaught TypeError: baz is not a function
    var baz = function () {
        console.log("bar2");
    };
  • 在严格模式下,未声明的变量使用会导致 ReferenceError,因此变量提升的影响会更显著。函数声明在严格模式下同样存在提升,但也要注意 TDZ。

到了这里,关于JavaScript的变量提升与函数提升的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包