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变量。我们知道初始化不存在变量提升,所以这里会出问题。
上一篇: nginx安装依赖