使用JavaScript进行吊装是一种行为,其中可以在声明之前使用函数或变量。例如,
// using test before declaring
console.log(test); // undefined
var test;
上面的程序有效,输出将是不确定的 。上面的程序表现为
// 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 Variable Scope 。
注意 :在吊装中,变量声明仅可用于直接作用域。
如果将变量与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
在声明之前被调用,程序显示输出。这是由于吊装。
但是,将函数用作表达式时 ,会发生错误,因为仅提升了声明。例如;
//程序以打印文本
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
更好。