执行上下文和Javascript中的执行上下文对象
Execution context and the execution context object in Javascript
我的脑袋在转,有人能解释一下javascript是如何存储变量的,什么是"执行上下文"answers"执行上下文对象"吗?
为什么代码片段在控制台上打印以下输出:
你好论点
你好论点
var hello = 'hello is assigned';
function prison(hello) {
console.log(hello);
var hello;
console.log(hello);
}
prison('the hello argument');
谢谢!
这与执行上下文没有太大关系,而与函数变量范围有关。将'the hello argument'
作为参数传递给函数,并且作为本地参数,它将被使用,而不是在函数外部声明的hello
var。
var hello
什么都不做,如果使用use strict
或linter,可能会引发警告(试图声明现有变量)。
如果您将其更改为var hello = null;
,您将看到输出的更改。
现在,如果你有以下代码:
var hello = 'hello is assigned';
function prison() {
console.log(hello);
var hello;
console.log(hello);
}
prison();
您将获得两个日志的undefined
。这可能是由于变量提升-变量声明在执行前被移动到函数的开头-所以代码实际上看起来是这样的:
function prison() {
var hello;
console.log(hello);
console.log(hello);
}
CCD_ 7在这两种情况下都是CCD_。
您的函数prison()
在变量hello
上有闭包,prison()
中的var hello;
没有创建新变量,该函数可以看到已经定义了一个全局变量hello
,因此它使用该变量,因此您得到2个the hello argument
但是,如果在prison()
之前没有定义hello
,则会得到2个undefined
bcoz,hello
的定义将在prison()
中被提升,并且hello
没有设置值。
相关文章:
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- javascript中的全局和局部变量执行上下文
- 执行上下文和Javascript中的执行上下文对象
- 函数参数的 JavaScript 执行上下文
- 逗号运算符是否会影响 Javascript 中的执行上下文
- 执行上下文和闭包
- Java 脚本 eval() 函数属于哪个对象?此外,在调用 eval() 函数时传递执行上下文
- JavaScript 范围和执行上下文
- 如何在 JavaScript 中动态地向当前执行上下文添加属性
- 任何用于 JavaScript 执行上下文可视化的现有工具
- 为什么此处未创建执行上下文
- 是否可以传递立即调用的函数表达式的执行上下文
- 如何确定 JavaScript 回调函数的执行上下文
- Node.js获取执行上下文的编程模式
- JavaScript中的执行上下文
- 获取javascript函数的绑定执行上下文
- 了解 JavaScript 提升和执行上下文
- 什么是'执行上下文'在JavaScript中
- 全局执行上下文是否可能从执行堆栈中弹出
- d3.js/CoffeeScript:访问mouseover中类和路径的执行上下文(this)