首页 > 编程语言 >JavaScript 中的提升

JavaScript 中的提升

时间:2024-09-20 20:25:00浏览次数:9  
标签:console 变量 JavaScript myvariable 提升 声明 log

什么是 javascript 提升?提升是指 javascript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始之前将声明放入堆栈中。 简单来说:用 var 声明的变量在提升期间被初始化为未定义。函数声明已完全提升,可以在编写代码之前调用。提升过程可确保这些声明在执行堆栈中得到识别,无论它们在代码中的位置如何。立即学习“Java免费学习笔记(深入)”;需要注意的是,只有声明被提升,而不是赋值。作业保留在您撰写作业的同一位置。注意:那些说在提升过程中代码移到顶部的人实际上是错误的。代码永远不会向上移动。 例子:console.log(myvariable); // undefined var myvariable = 10;登录后复制此代码同时执行两个操作。首先,它声明变量 myvariable 并将其提升到作用域,但其值仍然未定义。因此,console.log 命令将未初始化的值显示为未定义。之后,值 10 被分配给 myvariable。但是,如果您尝试更改它,则不会对之前的声明产生任何影响。例如:console.log(myvariable); // referenceerror: myvariable is not defined myvariable = 10;登录后复制这里,我们还没有声明 myvariable 变量,因此它在尝试更改它之前会抛出 referenceerror。总之,javascript 首先读取所有代码,然后将所有声明提升到外部,同时将赋值保留在其原始位置。这个过程称为提升。 var 和 let 也被提升:var 和 let 都在 javascript 中被提升,但它们的行为略有不同。 变量:当你使用 var 声明一个变量时,它的声明被提升到了作用域之外,你可以在声明之前访问该变量,但在它被赋值之前,它的值将是未定义的。 例子:console.log(myvariable); // undefinedvar myvariable = 10;登录后复制在上面的代码中,声明 var myvariable 被提升到范围之外,但赋值 myvariable = 10 保留在原处。因此,console.log 语句输出 undefined,因为变量存在但尚未赋值。 让:另一方面,当您使用 let 声明变量时,提升行为有点不同。变量声明已提升,但您无法在声明之前访问该变量。这被称为“暂时死区”。如果您尝试在声明之前访问 let 变量,您将收到 referenceerror。 例子:console.log(myvariable); // referenceerror: myvariable is not definedlet myvariable = 10;登录后复制在这种情况下,let 声明被提升,但在声明之前无法访问该变量。因此,console.logstatement 会抛出 referenceerror,因为变量尚未定义。这里基本上在let的情况下,即使提升了,变量的值仍然是未定义的。因为内存中没有空间容纳该变量。因此无法引用该地址。因为内存中没有myvariable = 10的地址,所以给出引用错误。 常量:const 关键字允许您创建常量,这些变量一旦赋值就无法重新赋值。 示例:1const pi = 3.142;pi = 22/7; // attempt to reassign the value of piconsole.log(pi); // output: typeerror: assignment to constant variable登录后复制在这个例子中,我们将 pi 定义为一个常量,初始值为 3.142。当我们尝试为 pi 重新分配新值时,会抛出 typeerror,因为常量无法重新分配。 示例:2const pi;console.log(pi); // output: syntaxerror: missing initializer in const declarationpi = 3.142;登录后复制在这种情况下,我们声明一个常量 pi 而不对其进行初始化。此代码会抛出 syntaxerror,因为常量必须同时声明和初始化。 示例:3function getcircumference(radius) { console.log(circumference); circumference = pi * radius * 2; const pi = 22/7;}getcircumference(2); // referenceerror: circumference is not defined登录后复制在这里,在 getcircumference 函数中,我们尝试在声明之前访问它的周长。它会抛出 referenceerror,因为变量尚未定义。使用const时,需要在使用变量之前声明并初始化变量。总体而言,var 和 let 都在 javascript 中被提升,但它们的行为和临时死区的概念仅适用于 let 变量。 const 创建一旦初始化就无法重新分配的常量。 所有未声明的变量都是全局变量:function hoisted() {a = 20;var b = 100;}hoisted();console.log(a); // 20// can be accessed as a global variable outside the hoisted() function.console.log(b);// as it is declared, it is bound within the bounds of the hoisted() function. we cannot print it outside the hoisted() function.output: referenceerror: b is not defined登录后复制 函数作用域变量我们可以看到,函数 hoist() 作用域中 var 消息变量的声明将到达函数的顶部。为了避免这个问题,我们将确保在使用变量之前声明它。在您提供的两个示例中,输出都将是未定义的。 示例:1function hoist() { console.log(message); var message = 'hoisting is all the rage!';}hoist(); // output: undefined登录后复制 示例:2function hoist() { var message; console.log(message); message = 'hoisting is all the rage!';}hoist(); // output: undefined登录后复制在这两种情况下,输出都是未定义的,因为变量被提升到各自作用域的顶部,但它们的赋值随后按照代码的原始顺序发生。 函数表达式函数表达式不会被提升,并抛出 typeerror,因为该表达式被视为变量而不是函数。expression(); // output: "typeerror: expression is not a functionvar expression = function() { console.log('will this work?');};登录后复制 严格模式从它的名字来看,它是 javascript 的一个受限变体,不允许在声明变量之前使用变量。在严格模式下运行我们的代码:通过将一些静默的 javascript 错误更改为显式抛出错误来消除它们。修复了 javascript 引擎难以执行优化的错误。你可能会错过声明变量的机会,使用 strict 会抛出引用错误来阻止你。'use strict';console.log(hoist); // Output: ReferenceError: hoist is not definedhoist = 'Hoisted';登录后复制 结论在声明变量和函数时了解 javascript 中的提升非常重要,随着对提升的解释,您将了解 javascript 代码的实际处理方式。 以上就是JavaScript 中的提升的详细内容,更多请关注我的其它相关文章!

标签:console,变量,JavaScript,myvariable,提升,声明,log
From: https://www.cnblogs.com/aow054/p/18423218

相关文章

  • JavaScript 中的数组分组(4)
    JavaScript中的数组分组(2024)数组分组在JavaScript中并不是什么新鲜事。数组分组是JavaScript中的一项新功能,可帮助开发人员根据特定特征将数组中的元素组织成组。这使得查找和使用数据变得更加容易。现在的问题是它是如何运作的?好吧,在最新和现代的方法出现之前,开发人员将......
  • JavaScript 中的星空可视化
    这是一个简单、直接的可视化实现,让人想起经典的Windows95星空屏幕保护程序。它也是交互式的:您可以触摸屏幕或使用加速计来影响运动的方向。这就是它的工作原理:创建一堆粒子(100),每个粒子处于随机位置。每一帧,将每个粒子进一步远离中心*。粒子距离中心越远,它就会变得越明显。这......
  • JavaScript 中的正则表达式
    没有多少人谈论正则表达式,尽管它们对于文本操作和数据验证非常有用。它们提供了一种强大的方法来搜索、匹配和替换字符串中的模式。在JavaScript中,RegExp是一个可以有效地用来查找和操作这些模式的对象,无论您是在验证电子邮件、格式化电话号码还是解析日志。正则表达式甚至可......
  • javassisit提升反射效率
    Javassist简介Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的ShigeruChiba所创建的。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。Javassist(JAVA编程ASSISTant......
  • JavaScript 中 new Function() 和 new function() 的区别
    javascript确实很灵活,但它也带来了一些混乱。例如,你可以使用多种方式来做同一件事情,比如创建函数、对象等。那么标题中提到的两者有什么区别呢?newfunction是另一种创建函数的方式,其语法:constfunc=newfunction([arg1,arg2,...argn],functionbody);一个简单的例子:constsu......
  • JavaScript 中平滑动画的秘密!
    想要在您的网络应用程序中创建黄油般平滑的动画吗?尝试requestanimationframe——javascript的内置优化动画方法!requestanimationframe不使用settimeout或setinterval(这可能会因帧速率不一致而导致动画卡顿),而是将动画与浏览器的刷新率同步,以获得最佳性能。使用方法如下:letp......
  • JavaScript 中的 SET(初学者教程)
    你好,您是否正在寻找一种存储唯一值、允许插入值、查找值总数和删除值的数据结构?套装是最佳选择。许多编程语言都包含内置的set数据结构,javascript也不例外。让我们更深入地了解集合的工作原理。设置是什么???set是一种数据结构,可让您存储任何类型的唯一值,无论是原始值还是对......
  • JavaScript 中的一等公民功能
    什么是一等函数?一等公民意味着函数可以像其他数据类型一样使用。它意味着函数可以分配给变量,作为参数传递给其他函数,并作为值返回。这是函数式编程中的一个重要概念,因为它允许我们编写更多模块化和可重用的代码。分配给变量作为参数传递给其他函数作为值从函数返回以下是在javasc......
  • JavaScript 中的五种作用域:开发人员深入探讨
    javascript对变量的行为是由它的作用域决定的。理解范围是编写健壮、可维护的代码的基础。本文将探讨javascript中的五种主要作用域类型——全局、局部、块、函数作用域(和闭包)和作用域链。最后,您将清楚地掌握javascript如何跨不同上下文处理变量。目录1.全球范......
  • JavaScript 中的交互:“警报”、“提示”和“确认”
    ****欢迎回到我们的javascript世界之旅!在这篇博文中,我们将探讨在javascript中与用户交互的三种基本方法:警报、提示和确认。这些方法分别允许您显示消息、收集用户输入和确认操作。让我们深入研究每种方法,看看它们是如何工作的。1.?警报alert方法用于显示一个简单的对话......