当前位置: 首页 > 知识库问答 >
问题:

为什么下面的代码不会在JavaScript中导致错误?

李鹏
2023-03-14

在js中,我们必须首先声明一个变量,然后才能使用它,但是当我编写这两行代码时,它可以正常工作!!

name = 'ali';
console.log(name);

共有3个答案

刘永望
2023-03-14

人们很容易认为JavaScript程序中的所有代码都是在程序执行时按自顶向下的顺序逐行解释的。 虽然这基本上是正确的,但有一部分假设可能会导致对程序的错误思考。

当您看到name='ali';时,您可能会认为这是一个语句。 但是JavaScript实际上把它看作两个语句:var name; 且name=ali;。 第一个语句,即声明,是在编译阶段处理的。 第二条语句,即赋值,留在执行阶段。

因此您的代码段应该被认为是这样处理的:

var name;
name = 'ali';
console.log(name);

因此,关于这个过程的一种思考方式是,变量和函数声明从它们在代码流中出现的地方“移动”到代码的顶部。 这就有了“吊装”这个名字。

柴宝
2023-03-14

建议您声明变量,但这不是必需的(除非您处于严格模式)

从技术角度来看,您给出的示例本身也不是变量声明,而是设置全局对象的属性。

金晨
2023-03-14

基本情况如下:

null

const aFunction = function() {
    //name is created here

    (function() {
    name = 'ali'; //var name = 'ali';
  })();
  
    console.log(name);
};


aFunction(); // name = 'ali';
 类似资料:
  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 如果我注释掉“%matplotlib inline”,代码运行正常,但如果我不注释“%matplotlib inline”,则“fig,axes=plt.subplot(nrows=x_p,ncols=y_p)”开始创建空白绘图,下面的代码会触发如下错误。知道为什么吗?

  • 下面是我遇到错误的程序: //导入扫描程序类导入java。util。扫描仪; 这些是我得到的错误:

  • 如图,代码来自官方文档的reference,版本也是1.0.0-rc.13

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...

  • 所以当我在leetcode上运行这个代码时,它告诉我在列表节点中发现错误循环,但是我一生都不知道为什么。请帮忙,谢谢! }

  • 我正在做一个编码练习:给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 所以我写了这段代码: 现在,这段代码似乎适用于大多数序列,但这段代码引发了一个错误: 错误如下: 我只是不明白列表索引怎么可能超出范围…有人有线索吗?

  • 题目地址 : https://leetcode.cn/problems/flatten-nested-list-iterator/ 为什么会出错呢?