欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javaScript之变量提升

程序员文章站 2022-04-04 22:50:56
...

在平时开发过程中,我们都会遇到变量提升。

但却没有好好研究过,重视基础很重要!!!

一、变量

定义:变量是存储信息的容器。

特点:是松散类型的,也就是说可以用来保存任何类型的数据。

var turbo;
//未经初始化的变量,会保存一个特殊的值undefined;
console.log(turbo)  //undefined


function test(){
    var a = 2;
}
test();
console.log(a) //发生错误。
//在函数中定义变量,那么这个变量会在函数退出后就会被销毁。


function test1(){
    b = 7;
}
test1();
console.log(b)   //7
//省略了var操作符,b变成了全局变量。

二、变量提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

1、变量提升

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

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

//这就是一个典型的变量提升。先使用 再声明。

JavaScript 只有声明的变量会提升,初始化的不会。

var a = 1;
console.log(a);  //1
//已经初始化  得到a为1

再来看另外一个例子:

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

得到结果:undefined


b=5;
console.log(b);
var b = 10;

得到结果:undefined

//以上例子证明:只有声明的变量会提升,初始化的不会。
 

注意:JavaScript 严格模式(strict mode)不允许使用未声明的变量。

2、函数提升

首先来看一个例子:

test();

function test(){
    console.log("a");
}

以上是一个简单的函数提升例子,在js预解析的时候,函数会被提升至最顶部,之后进行执行。

注意:使用匿名函数的方式不存在函数提升,因为函数名称使用变量表示的,只存在变量提升。

var test = function(){
    console.log("a");
}

function test(){
    console.log("b");
}

test();

得到结果:a;

//第一个test是一个变量,因此这个变量的声明也将提升到顶部,而变量的赋值依然保留在原来的位置。需要注意的是,函数优先,虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量。

平时不注意的同学可能会犯一个错误,下面来看看:

test();
var test = function(){
    console.log("a");
}

//结果:报错。

//为什么呢?
//其实这里是初始化了一个test变量。我们知道初始化不存在变量提升,所以这里会出问题。