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