在本教程中,您将通过示例学习 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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/zsx0728/article/details/124191473
内容来源于网络,如有侵权,请联系作者删除!