JavaScript中变量提升详解
ES6之前我们一般使用var来声明变量,提升简单来说就是把我们所写的类似于var a = 1这样,声明提升到它所在作用域的顶端去执行,到我们代码所在的位置来赋值。
如下:这种情况下输出undefined,变量提升 相当于 var a; (变量定义)提升 , 赋值停留在原地
console.log(a);
var a = 1;
//undefined 变量定义了 但是没有给变量赋值
// 变量提升 相当于 var a; (变量定义)提升 , 赋值停留在原地
// var a;
// console.log(a);
// a = 1;
多个script标签的情况下:变量提升不能跨标签
<script>
// console.log(a);/ 报错
</script>
<script>
// var a = 1;
</script>
//变量提升不能跨标签
其他情况:
1.在if语句里面:
<script>
console.log(a);
// a = 1;
// 在if语句里面
// console.log(a); // 未定义 1 报错 2
// if(false){
// var a =1;
// }
// 写在if语句里面 也是存在变量提升
// 虽然if没有执行 ture里面的内容 但是也存在变量的提升
//在js里面 var 存在变量声明提升 如果先使用变量 只会知道 它已经存在 但是如果是在
// 使用之后赋值 我们只能输出未定义
</script>
2函数:
<script>
// myFuncA(); // 1 2
// function myFuncA() { //函数具有预编译能力
// alert("哈哈A");
// }
console.log(a);
var a = 10;
console.log(a);
function a(){
console.log("我是A");
}
console.log(a);
输出:undefined 10 10.
//函数会优先变量 先提升
// function a(){
// console.log("我是A");
// }
// var a;
</Script>
3
<script>
console.log(a);
a = 1; //报错
这里要区分和我们第一种的情况
第一种定义了var a=1;
而这里只是a=1;
我们说过 第一种情况相当于 var a; (变量定义)提升 , 赋值停留在原地
而这里没有定义则是报错
</script>
4
console.log(b);
b();
var b = function(){
console.log(1);
}
// b 是一个变量 只是把一个匿名函数赋值给了变量 b