JavaScript 提升

x33g5p2x  于2022-04-16 转载在 Java  
字(1.9k)|赞(0)|评价(0)|浏览(228)

在本教程中,您将通过示例学习 JavaScript。
    JavaScript 中的提升是一种在声明之前可以使用函数或变量的行为。例如,

// using test before declaring
console.log(test);   // undefined
var test;

上面的程序执行,输出将是 undefined。上述程序等同于:

// using test before declaring
var test;
console.log(test); // undefined

由于变量 test 仅被声明并且没有值,undefined 值被分配给它。
    如果您想了解有关变量的更多信息,请访问JavaScript 变量。
    注意:在提升过程中,虽然声明似乎在程序中被提升了,但实际发生的事情是,函数和变量声明在编译阶段被添加到内存中。

变量提升

就变量和常量而言,关键字 var 被提升,let 和 const 不允许提升。
    例如,

// program to display value
a = 5;
console.log(a);
var a; // 5

在上面的示例中,在声明变量 a 之前使用它。程序运行并显示输出 5。该程序的作用如下:

// program to display value
var a;
a = 5;
console.log(a); // 5

然而在 JavaScript 中,初始化不会被提升。例如,

// program to display value
console.log(a);
var a = 5;

输出

undefined

上述程序的作用如下:

var a;
console.log(a);
a = 5;

在编译阶段,只有声明被移动到内存中。因此,变量 a 的值是 undefined,因为 a 是在未初始化的情况下打印的。
    此外,当变量在函数内部使用时,变量仅被提升到函数的顶部。例如,

// program to display value
var a = 4;

function greet() {
    b = 'hello';
    console.log(b); // hello
    var b;
}

greet(); // hello
console.log(b);

输出

hello
Uncaught ReferenceError: b is not defined

在上面的示例中,变量 b 被提升到 greet 函数的顶部,并成为局部变量。因此 b 只能在函数内部访问。b 不会成为全局变量。
    要了解有关局部和全局变量的更多信息,请访问JavaScript 变量作用域。
    注意:在提升中,变量声明只能在直接作用域内访问。
    如果变量与 let 关键字一起使用,则不会提升该变量。例如,

// program to display value
a = 5;
console.log(a);
let a; // error

输出

Uncaught ReferenceError: Cannot access 'a' before initialization

使用 let 时,必须先声明变量。

函数提升

可以在声明之前调用函数。例如,

// program to print the text
greet();

function greet() {
    console.log('Hi, there.');
}

输出

Hi, there

在上面的程序中,函数 greet 在声明之前被调用,程序显示了输出。这是由于提升。
    但是,当函数用作表达式时,会发生错误,因为只提升了声明。例如,

// program to print the text
greet();

let greet = function() {
    console.log('Hi, there.');
}

输出

Uncaught ReferenceError: greet is not defined

如果在上述程序中使用 var,则错误为:

Uncaught TypeError: greet is not a function

注意:一般来说,提升不在其他编程语言如 Python、C、C++、java 中执行。
    提升可能会在程序中导致不良结果。最好在使用变量和函数之前先声明它们,并避免提升。
    在变量的情况下,最好使用 let 而不是 var。

上一教程 :JS Variable Scope                                         下一教程 :JS Recursion

参考文档

[1] Parewa Labs Pvt. Ltd. (2022, January 1). Getting Started With JavaScript, from Parewa Labs Pvt. Ltd: https://www.programiz.com/javascript/hoisting

相关文章

微信公众号

最新文章

更多