Javascript中的执行上下文和执行上下文对象
我的脑子在转,有人能解释一下javascript是如何存储变量的,什么是“执行上下文”和“执行上下文对象”吗 为什么代码段会在控制台上打印以下输出: hello论点 hello论点Javascript中的执行上下文和执行上下文对象,javascript,function,global-variables,Javascript,Function,Global Variables,我的脑子在转,有人能解释一下javascript是如何存储变量的,什么是“执行上下文”和“执行上下文对象”吗 为什么代码段会在控制台上打印以下输出: hello论点 hello论点 var hello='hello已分配'; 功能监狱(你好){ console.log(hello); 你好; console.log(hello); } 监狱(“你好的争论”)您的函数savilion()在变量hello上有闭包,var hello在监狱()中没有创建新变量,函数可以看到已经定义了一个全局变量he
var hello='hello已分配';
功能监狱(你好){
console.log(hello);
你好;
console.log(hello);
}
监狱(“你好的争论”)代码>您的函数savilion()
在变量hello
上有闭包,var hello
在监狱()
中没有创建新变量,函数可以看到已经定义了一个全局变量hello
,因此它使用该变量,因此得到2个hello参数
但是,如果在监狱()
之前没有定义你好
,您将得到2个未定义的bcoz你好
的定义将被提升到监狱()
并且你好
没有设置值。您的函数监狱()
对变量你好
有闭包,var-hello
在监狱()
中没有创建新变量,函数可以看到已经定义了一个全局变量hello
,因此它使用该变量,因此得到2个hello参数
但是,如果在监狱()之前没有定义hello
,您将得到2个未定义的bcozhello
的定义将在监狱()中悬挂
和hello
没有设置值。这与执行上下文关系不大,而与函数变量范围有关。您将'hello参数'
作为参数传递给函数,并且作为本地参数,它被用来代替在函数外部声明的hello
变量
var hello
不执行任何操作,如果使用use strict
或linter,则可能会发出警告(试图声明现有变量)
如果将其更改为var hello=null代码>您将看到输出的更改
现在,如果您有以下代码:
var hello = 'hello is assigned';
function prison() {
console.log(hello);
var hello;
console.log(hello);
}
prison();
…对于这两个日志,您将得到未定义的。这可能是由于-变量声明在执行之前被移动到函数的开头-因此代码实际上看起来是这样的:
function prison() {
var hello;
console.log(hello);
console.log(hello);
}
hello
在这两种情况下都是未定义的
。这与执行上下文关系不大,与函数变量范围有关。您将'hello参数'
作为参数传递给函数,并且作为本地参数,它被用来代替在函数外部声明的hello
变量
var hello
不执行任何操作,如果使用use strict
或linter,则可能会发出警告(试图声明现有变量)
如果将其更改为var hello=null代码>您将看到输出的更改
现在,如果您有以下代码:
var hello = 'hello is assigned';
function prison() {
console.log(hello);
var hello;
console.log(hello);
}
prison();
…对于这两个日志,您将得到未定义的。这可能是由于-变量声明在执行之前被移动到函数的开头-因此代码实际上看起来是这样的:
function prison() {
var hello;
console.log(hello);
console.log(hello);
}
hello
在这两种情况下都是未定义的