在 javascript 中的函数内声明一个没有 var 的变量

declare a variable withour var inside a function in javascript

在 JavaScript 中,代码的执行分为两个阶段。在第一步中,它被读取并且 space 被保留用于变量(最初给定值 undefined)和函数。在第二阶段,它是逐行执行的。

而且我还读到没有 var 关键字声明的变量被设置为 Global 变量。

因此,如果我在函数内定义变量之前打印一个变量,它应该打印 undefined。就像下面的代码:

b();

console.log(a);
console.log(d);
var a = 'Hello World!';

function b() {
  console.log(c);
  console.log('Called b!');
  var c = "variable c is printed";
  console.log(c);
  console.log(d);
  d = "Variable d is printed";
}

我希望输出为:

undefined
Called b!
variable c is printed
undefined
Variable d is printed

但我得到以下输出:

undefined
Called b!
variable c is printed
Uncaught ReferenceError: d is not defined
    at b (app.js:12)
    at app.js:1

所以我的疑问是,当函数b被调用时,那么在代码执行的第一阶段,变量d应该被赋予space和值undefined最初。然后在第二阶段开始逐行执行。

And also I read that the variables declared without var keyword are set as Global variables.

是的,有点。会发生什么,如果你做一个作业,比如

 d = 1;

引擎遍历所有环境记录(变量值在运行时存储的地方),所以在你的情况下它首先进入bs记录,然后到全局记录。如果它在其中一条记录(如您所说,是在执行开始时创建的)中找到变量绑定(名称 -> 值),则会将值存储在那里。但是,如果它到达全局记录,并且沿途没有找到绑定(变量未声明),它只会在该全局记录处创建一个新绑定。

因此,当您执行 console.log(d) 时,d 的绑定不存在,并且访问 d 失败。

在第一阶段尝试为变量设置space时按关键字查找它们:

var/let/const

当你在第二阶段不使用它时,崩溃的变量指针不存在 space,在函数范围 d 中没有任何 space 和它的崩溃点。

此代码显示发生了什么:

console.log(a);
a = 'Some Value For A Variable';

解决方法二:

1- 使用关键词

console.log(a);
var a = 'Some Value For A Variable';

2-首先初始化

a = 'Some Value For A Variable';
console.log(a);

最好的清晰代码是两个解决方案的复数: * 使用关键词 * 定义后调用变量

var a = 'Some Value For A Variable';
console.log(a);

祝你好运