当前位置: 首页 > 面试题库 >

javascript和var关键字中的赋值

凤晨朗
2023-03-14
问题内容

我正在阅读“学习节点”这本书,但陷入了一个非常简单的问题,这个问题我并没有考虑太多:javascript中的赋值。

作者指出,我们应该意识到,通过使用Node的REPL,以下内容将返回undefined:

var a = 2
(undefined)

而以下代码将在REPL中返回“ 2”:

a = 2
2

这是为什么?上面的代码不是归因吗?怎么会?如果var’a’直到代码中的那个点才存在,那么为什么它不存在并归因于此?


问题答案:

根据ECMA-262第12.2节,
VariableStatement (即var identifier=value)明确不返回任何内容。另外, VariableStatement
是一条语句;语句不返回值,并且将Statement放置在Expression所在的位置是无效的。

例如,以下任何一项都没有意义,因为它们将一个Statement放置在您需要增值表达式的位置:

var a = var b;
function fn() { return var x; }

根据第11.13.1节,
分配 给变量(identifier=value)会返回分配的值。

在编写时var a = 1;,它声明a并将其值初始化为1。由于这是一个 VariableStatement
,因此不返回任何内容,并且REPL打印undefined

a=1是分配1给的表达式a。由于没有a,JavaScript会在普通代码中隐式创建一个 全局
变量a(但是会ReferenceError在严格模式下抛出,因为您不允许在严格模式下隐式创建新的全局变量)。

无论之前是否a存在,表达式仍会返回分配的值1,因此REPL会打印该值。



 类似资料:
  • 问题内容: C#中 var 关键字的一种用法是隐式类型声明。 var 的Java等效语法是什么? 问题答案: 空无一人。las,您必须输入完整的类型名称。 编辑:发布7年后,Java 10中添加了局部变量的类型推断(带有)。 编辑:发布6年后,从下面收集一些评论: C#使用关键字的原因是因为在.NET中可能有没有名称的Types。例如: 在这种情况下,不可能给赋予正确的类型。6年前,这在Java中

  • 本文向大家介绍C#中var关键字用法分析,包括了C#中var关键字用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了C#中var关键字用法。分享给大家供大家参考。具体方法如下: C#关键字是伴随着.NET 3.5以后,伴随着匿名函数、LINQ而来, 由编译器帮我们推断具体的类型。总体来说,当一个变量是局部变量(不包括类级别的变量),并且在声明的时候初始化,是使用var关键字的前提。具

  • 问题内容: 保留哪些JavaScript关键字(函数名称,变量等)? 问题答案: 其中包含JavaScript中所有保留的关键字,专门针对那些当下保持诚实,而不仅仅是尝试得分的人:

  • 本文向大家介绍JavaScript中的超级关键字?,包括了JavaScript中的超级关键字?的使用技巧和注意事项,需要的朋友参考一下 超 该超级 关键字用于访问和调用函数对对象的父。在类和对象文字中的任何方法定义中,super.prop和super [expr]表达式均清晰可见。它在“ extended ”类中使用,该类使用“ extends ”关键字。 语法 示例 在以下示例中,名为“人”的类

  • s代表“hi”,s1代表hi所在的内存位置? 请帮帮忙?

  • 问题内容: 如果声明变量而不使用“ var”,则变量始终变为GLOBAL。 在函数内部声明全局变量是否有用?我可以想象在某个事件处理程序中声明一些全局变量,但这有什么用呢?更好地使用RAM? 问题答案: 不,没有RAM好处或类似的好处。 w3schools谈论的是我所说的“内隐全球性恐怖” 。考虑以下功能: 看起来很简单,但是由于线路上的错字,它返回,而不是。并创建一个带有输入错误名称的全局变量: