📜  JavaScript吊装

📅  最后修改于: 2020-09-27 07:26:35             🧑  作者: Mango

在本教程中,您将在示例的帮助下了解JavaScript提升。

使用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被吊起, letconst不允许吊起。

例如,

// 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)执行提升。

吊装可能会在程序中导致不良后果。最好在使用变量和函数之前先声明它们,避免吊起。

对于变量,最好使用letvar更好。