发布于 2021-11-24 23:49:57
问题1:“两个变量在编写时是这样声明的:
var a, a;答案1: No.
在执行之前对var源代码进行扫描,在草率模式中,使用关键字将相同标识符(在本例中为“a”)的任意数量的声明合并并悬挂为函数顶部的单变量声明(或脚本文件或内联元素中顶级变量的情况下的脚本元素)。
使用function关键字声明的命名函数也被悬挂到封闭函数或脚本元素的顶部,但有一些不同之处:
问题2当Javascript引擎扫描代码并找到两个同名变量时,它会删除一个变量并在代码执行中使用另一个变量吗?
回答2:是的,
为了稍微重声明它,JavaScript engine 没有找到两个变量,而是找到两个变量声明,这些声明在挂起时只会导致变量名与其存储在内存中的位置的单个绑定--这意味着只创建了一个变量。
发布于 2021-11-24 22:53:17
var声明被悬挂到函数的顶部。var声明与赋值是分开处理的。您的代码本质上与以下内容相同:
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。
https://stackoverflow.com/questions/70103806
复制相似问题