JavaScript:在函数中初始化全局变量

用户名

我有一个问题,对于您经验丰富的JavaScript程序员(我更是后端/数据库开发人员)而言,这可能很明显。所以,如果这太简单了,请多多包涵!

我有以下代码:

var skill = "JavaScript";

function printSkill() {
    console.log(skill); // <-- This prints undefined
    var skill = "Java"; // <-- How can this possibly work?
    console.log(skill); // <-- This prints "Java"
}

printSkill();

输出为:

未定义的
Java

我知道可以运行此代码,因为JavaScript尚未编译,而是在运行时进行解释(例如在C ++中不会编译)。但是为什么这个代码行得通呢?例如,当涉及例如C ++的范围规则时,为什么要undefined记录日志而不是记录日志"JavaScript"是显而易见的选择。而且,第二个日志为什么显示“ Java”,不是undefined吗?

约瑟夫

JavaScript分两步进行解析。首先,它找到所有函数和变量声明,然后执行代码。对于编译器来说,您的代码如下所示:

// declaration
var skill = undefined; 

// declaration
function printSkill() {

    // declaration
    var skill = undefined;

    // execution
    console.log(skill);
    skill = "Java";
    console.log(skill);
}

// execution
skill = "JavaScript";
printSkill();

这种现象被许多人称为“吊装”,但它们并不是完全“提起”的。这就是编译器遍历代码的方式。

解决您的问题:

  • 如果您打算skill将范围内的内容替换Java,则在对其进行任何操作之前将声明和定义移到最上面。

  • 如果您打算更换全球skill,然后取出varskill内部的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

显示模块模式-全局变量/初始化函数

全局变量的初始化与函数内部的静态变量的初始化是否相同

在全局变量的初始化/反初始化中使用隐式加载的DLL中的函数

在python的构造函数中初始化全局变量后如何保留它的值?

C 头文件中的全局变量初始化

初始化 cuda 全局变量

如何初始化全局变量

进行全局变量初始化

初始化全局变量.Net

用C中的整数广播全局变量指针初始化全局变量

Python:无法从初始化文件导入在setUp方法中初始化的全局变量

将函数映射到 swift 错误中的全局变量“初始化程序‘init(_:)’要求‘[_]’符合‘LosslessStringConvertible’”

在C与C ++中使用函数调用初始化全局变量

全局变量0初始化的惩罚

thread_local与全局变量的初始化顺序

如何声明全局变量和初始化

C ++全局变量初始化顺序

正确等待全局变量初始化

如何通过延迟初始化共享全局变量?

全局变量是否总是用零初始化?

静态全局变量初始化顺序

如何使用@MainActor 初始化全局变量?

在C ++中使用全局变量初始化

android如何初始化全局变量

全局变量上的“初始化器不是常数”?

无法在基于JavaScript的游戏中初始化全局变量

除初始化外,无法在函数中访问全局变量的值

为什么我的全局变量没有在Test :: Class中初始化?

JUnit:是否可以模拟在全局变量的初始化中调用的静态方法?