首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无功和吊装

无功和吊装
EN

Stack Overflow用户
提问于 2021-11-24 22:45:08
回答 2查看 115关注 0票数 1
  1. 我的第一个问题是: javascript接受声明并将函数代码放在函数代码的顶部,因为在执行任何代码之前都需要提升,我想知道在下面我说过的情况下,有两个变量声明它们是这样写的: var a,a;??因为函数代码顶部的提升?如果是这样,我为什么不访问第二个变量a,在初始化之前为什么我访问第一个变量a,简而言之,在函数代码console.log(a) // 10的第4行中,javascript决定给出10个变量,而不是未定义的变量,那么请注意,上面有两个变量声明具有相同的名称。
  2. 我的第二个问题是:当javascript扫描代码并找到两个同名变量时,它可以删除一个变量,并在代码执行中使用另一个变量。 函数myFunc() { console.log(a);var a= 10;console.log(a);var a= 20;console.log(a);} myFunc();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-24 23:49:57

问题1:“两个变量在编写时是这样声明的:

代码语言:javascript
复制
 var a, a;

答案1: No.

在执行之前对var源代码进行扫描,在草率模式中,使用关键字将相同标识符(在本例中为“a”)的任意数量的声明合并并悬挂为函数顶部的单变量声明(或脚本文件或内联元素中顶级变量的情况下的脚本元素)。

使用function关键字声明的命名函数也被悬挂到封闭函数或脚本元素的顶部,但有一些不同之处:

  • 悬挂函数在悬挂时编译,并可在源代码中出现之前调用。
  • 声明一个函数的名称与在同一作用域中声明的前一个函数的名称相同,将取代以前的声明。只有相同范围内最后一个同名函数的代码才会被吊起。

问题2当Javascript引擎扫描代码并找到两个同名变量时,它会删除一个变量并在代码执行中使用另一个变量吗?

回答2:是的,

为了稍微重声明它,JavaScript engine 没有找到两个变量,而是找到两个变量声明,这些声明在挂起时只会导致变量名与其存储在内存中的位置的单个绑定--这意味着只创建了一个变量。

票数 2
EN

Stack Overflow用户

发布于 2021-11-24 22:53:17

  • var声明被悬挂到函数的顶部。
  • 重复声明无效。
  • var声明与赋值是分开处理的。

您的代码本质上与以下内容相同:

代码语言:javascript
复制
function myFunc() {
  var a; // Declaration is hoisted
  console.log(a);
  a = 10; // Assignment is not
  console.log(a);
  a = 20; // Second assignment is also not
  console.log(a);
}

var显然是不直观的,这就是为什么现代代码避免使用const,有时还会选择let

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70103806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档