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

使用'let'作为变量名不会在Google v8中引发任何错误

卢书
2023-03-14
问题内容

我在chrome开发人员控制台中编写了一些随机代码。令我惊讶的是,chrome让我用它let作为变量名,因为let保留关键字完全不对。我需要了解为什么会这样。

场景:

var const = 78 //throws an error as expected

var function = 46 //throws an error as expected

var let = 56 //didn't throw an error :O

let //prints 56, which is wrong because 'let' is a keyword

let ab = 90

ab //prints 90 as expected

此缺陷存在于中node。但是,当我在Babel
REPL中
尝试时,会抛出错误。

我认为这与Google v8有关


问题答案:

Mohsen Azimi的这篇文章可以很好地说明其背后的原因。这是它的快速摘要。

以下关键字在JavaScript规范中定义为FutureReservedWord

implements     interface   let       package    private
protected      public      static    yield

在普通模式下,它们可以用作变量名而不会出现错误;但是,在严格模式下,它们被视为保留字,并且将引发以下错误:

SyntaxError: Cannot use the reserved word 'let' as a variable name in strict mode.

这样一来,ES2015之前的代码就不会中断-如果有人let在旧版应用程序中命名了许多变量,那么如果JS规范突然中断了所有操作,他们可能会不满意。



 类似资料:
  • 问题内容: 我正在尝试将表名传递到我的mysql存储过程中,以使用此sproc从其他表中进行选择,但是它不起作用… 这是我正在尝试的: 我也尝试过不带@符号,它只是告诉我TableName不存在…我知道:) 问题答案: 它取决于DBMS,但是这种表示法通常需要Dynamic SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不

  • 问题内容: 我有一个分配了字符串的变量,我想根据该字符串定义一个新变量。 问题答案: 你可以使用exec:

  • 问题内容: 我有以下带有变量的类,和。是一个关键字。如果要在下面的init方法中使用它,编写它的正确方法是什么? 更多上下文:该类明确需要该变量,因为它是另一个开发人员用另一种语言编写的POST端点所需的json的一部分。因此,更改变量名称是不可能的。 JsonAware代码: GenericEncoder代码: 问题答案: 如注释中所述,它是一个Python关键字,因此您不能将其用作变量名或属性

  • 问题内容: 假设我们有这样的东西: 问:如何使test_foo3()进行测试,但不会引发MyError?很明显,我可以测试一下: 但我想通过pytest.raises()进行测试。有可能吗?例如:在某种情况下,该函数“ foo”根本没有返回值, 恕我直言,以这种方式进行测试可能很有意义。 问题答案: 如果测试引发任何意外的异常,则测试将失败。您只需调用foo(7),就可以测试没有引发MyError

  • 问题内容: 我正在尝试执行此查询: 这将产生以下错误: Msg 1087,第16级,状态1,第5行 必须声明表变量“ @tablename”。 动态填充表名的正确方法是什么? 问题答案: 对于静态查询(如您的问题中的查询),表名和列名必须是静态的。 对于动态查询,应动态生成完整的SQL,并使用sp_executesql执行它。 这是一个脚本示例,用于比较不同数据库的相同表之间的数据: 静态查询:

  • 卷值不允许附加属性('${VOLUME_NAME}‘意外) 任何帮助都将不胜感激。