在javaScript,使用var关键字声明变量,声明语句会被提升到代码块顶部,函数的声明也会被提升;有以下几点现象:
1, 简单的提升
//严格模式下,使用未定义的变量会报错:---------------------
'use strict';
var b = c; //没有报错,因为JS的变量声明提升机制
var c = 9;
console.log(b);
//undefined
console.log(c);
//9
c=10;
//变量声明提升只是把声明变量的语句提升到最顶;赋值语句和其他语句或表达式按声明顺序执行;以上代码相当于:
var b;
var c; //变量提升
//赋值语句
b=c;
c=9;
//其他语句;
console.log(b);
//undefined
console.log(c);
//9
c=10;
2,当多次声明同一个变量(全局变量)时会有什么样的效果?
//当多次声明同一个变量名;函数总是在最顶部,同一个变量名貌似只会声明一次;
'use strict';
console.log(variable1);
// function variable1(){
// //1
// }
var variable1;
function variable1(){
//1
}
if(true){
function variable1(){
//hj
} //貌似代码块里的声明不影响外部的声明;------------
}
console.log(variable1);
// function variable1(){
// //1
// }
console.log(variable2);
// function variable2(){
// //2
// }
function variable2(){
//2
}
var variable2;
console.log(variable2);
// function variable2(){
// //2
// }
//后声明的函数覆盖前面声明的:----------------------
function gh(){
//e
}
function gh(){
//r
}
console.log(gh);
// ƒ gh(){
// //r
// }
//暂时知道有这些事就好了,具体也不太清楚为啥;可能是因为函数的声明是确定值的;
//再次声明函数,值可能会改变了,才有后声明覆盖前声明;不同于用var声明的变量;