返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中的声明提升实例详解
  • 653
分享到

JavaScript中的声明提升实例详解

JavaScript声明提升JavaScript声明 2022-11-16 00:11:26 653人浏览 薄情痞子
摘要

目录函数的提升var 变量声明提升let 和 const 变量声明和死区总结函数的提升 声明提升(hosting)是 javascript 解析器的一个特性,它会把代码中的函数、变量

函数的提升

声明提升(hosting)是 javascript 解析器的一个特性,它会把代码中的函数、变量声明语句作用提取到它所在作用域的最前面。

JavaScript 是支持在函数声明之前调用函数的。

say();
function say() {
  console.log("Hello");
}

解析器会扫描作用域内的代码,把函数声明提取到执行代码的前面。所以,解析器是这样看这段代码的:

function say() {
  console.log("Hello");
}
say();

除了普通函数,async function, function *, async function * 也有相同的提升效果。

var 变量声明提升

var 关键字的变量声明会被提升,但变量的赋值不会被提升。

console.log(foo); // undefined
var foo = "bar";
console.log(foo); // 'bar'

以上代码的解析结果为:

var foo;
console.log(foo);
foo = "bar";
console.log(foo);

这可能会导致一些奇怪的问题:

var x = "x in global";
(function () {
  // 这里期望读取全局变量
  console.log(x); // 结果为undefined. ?
  
  // 在函数内某处
  var x = "x in function";
})();

在过去,为了规避这种奇怪的提升,大家普遍把var 声明写在作用域的最前面。

var x='x';
var y='y';
function (){
    var x;
    var foo;
    // ...
}

当然,现在我们选择不用 var,改用更合理的 letconst

let 和 const 变量声明和死区

那么,letconst 就不存在变量提升了吗?—— 未必。

看这个例子:

const x = "x in global";
(function () {
  // 这里期望读取全局变量
  console.log(x); // ReferenceError: Cannot access 'x' before initialization
  
  // 在函数内某处
  const x = "x in function";
})();

执行报错,说明 const x = "x in function"; 一行影响了作用域内的上方区域代码。

解析器会扫描当前作用域下的 constlet 声明,在声明语句之前使用变量名都会触发 ReferenceError。这样可以避免上面提过的 var 提升问题和模糊不清的代码范式。

class 关键字也有同样的效果,new 一个未声明的类也会发生 ReferenceError

new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialization
class MyClass {}

有人认为这种情况不属于提升,毕竟声明和赋值都没有提前;也有人认为这些语句在执行之前就产生了影响,其作用提升了。个人偏向后者,这是对(变量和类名)标识符的提升。

总结

一些 JavaScript 声明语句的效果会影响到所在的整个作用域,这种现象称为提升。

有 3 种类型的提升:

  • function 关键字的声明和赋值都提升。
  • var 关键字声明提升,赋值不提升。
  • let, const, class 标识符提升,形成死区,声明和赋值都不提升。

以上就是JavaScript中的声明提升实例详解的详细内容,更多关于JavaScript 声明提升的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaScript中的声明提升实例详解

本文链接: https://lsjlt.com/news/173013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript中的声明提升实例详解
    目录函数的提升var 变量声明提升let 和 const 变量声明和死区总结函数的提升 声明提升(hosting)是 JavaScript 解析器的一个特性,它会把代码中的函数、变量...
    99+
    2022-11-16
    JavaScript 声明提升 JavaScript 声明
  • JavaScript声明提升实例分析
    本篇内容主要讲解“JavaScript声明提升实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript声明提升实例分析”吧!   ...
    99+
    2024-04-02
  • JavaScript中的声明提升是什么
    这篇文章主要讲解了“JavaScript中的声明提升是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的声明提升是什么”吧!声明提升(hosting)是 JavaSc...
    99+
    2023-07-04
  • 一起聊聊JavaScript中的声明提升
    以上就是一起聊聊JavaScript中的声明提升的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    JavaScript
  • JavaScript变量声明如何提升
    这篇文章主要讲解了“JavaScript变量声明如何提升”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript变量声明如何提升”吧!变量一个变量...
    99+
    2024-04-02
  • JavaScript中变量提升和函数提升实例详解
    js 执行 词法分析阶段:包括分析形参、分析变量声明、分析函数声明三个部分。通过词法分析将我们写的 js 代码转成可以执行的代码。 执行阶段 变量提升 ...
    99+
    2024-04-02
  • Javascript变量函数声明提升深刻理解
    目录前言:变量提升函数提升为什么要提升?最佳实践总结前言: Javascript变量函数声明提升(Hoisting)是在 Javascript 中执行上下文工作方式的一种认识(也可以...
    99+
    2024-04-02
  • JS中的提升机制变量提升函数提升实例详解
    目录正文一.变量提升二.函数提升三.判断顺序四.其他“提升” 1.作为import结果的声明是“提升的”;正文 对一些计算机...
    99+
    2024-04-02
  • JavaScript变量声明的var、let、const详解
    目录前言内容JavaScript的变量声明var的变量声明变量声明在函数作用域中变量重复声明变量声明提升怪异危险的varlet和const的变量声明块级作用域不可重复声明暂时性死区使...
    99+
    2024-04-02
  • JavaScript中的变量提升实例分析
    这篇文章主要介绍“JavaScript中的变量提升实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的变量提升实例分析”文章能帮助大家解决问题。前言:JavaScript中...
    99+
    2023-06-30
  • JavaScript三大变量声明实例分析
    这篇文章主要讲解了“JavaScript三大变量声明实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript三大变量声明实例分析”吧!Varvar 操作符用于定义变量(va...
    99+
    2023-06-30
  • JavaScript中的变量声明怎么理解
    这篇文章的内容主要围绕JavaScript中的变量声明怎么理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!变量ECMAScript中,变量可以保存...
    99+
    2023-06-29
  • JavaScript的变量提升实例分析
    本篇内容介绍了“JavaScript的变量提升实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • javascript中的函数怎么声明
    这篇文章主要介绍了javascript中的函数怎么声明,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在js中,...
    99+
    2024-04-02
  • JavaScript中声明常量的方法
    小编给大家分享一下JavaScript中声明常量的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在js中,可以使用const关键字声明常量,语法格式为“con...
    99+
    2023-06-15
  • javascript变量的声明与命名规范实例分析
    本篇内容主要讲解“javascript变量的声明与命名规范实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript变量的声明与命名规范实例分析...
    99+
    2024-04-02
  • Python中类的声明,使用,属性,实例
    类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下: class className: "类的注释" 类的实体 (当没有实体时 使用pass代替) 下面定义一个鸟类; class ...
    99+
    2023-01-31
    实例 属性 声明
  • javascript中变量提升的示例分析
    这篇文章主要介绍了javascript中变量提升的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:a = ...
    99+
    2024-04-02
  • 提升你的 HTML 游戏:用 DOCTYPE 声明精益求精
    引言: HTML 文档类型声明 (DOCTYPE) 是 HTML 文档第一行的特殊代码,它告知浏览器文档所遵循的 HTML 标准。它有助于浏览器正确解析和呈现页面,因为它指定了该页面应遵守的 HTML 版本和功能。 不同 HTML 标准的...
    99+
    2024-02-29
    HTML DOCTYPE、HTML 标准、兼容性、可访问性、SEO
  • 详解Swift中属性的声明与作用
    一、引言 属性将值与类,结构体,枚举进行关联。Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算一个值,其可以用于类,结构体和枚举。 二、存储属性 ...
    99+
    2022-06-04
    详解 属性 声明
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作