<script>
//代码段1--------------------------
var le = '变量值'; //声明变量并赋值
console.log(le); // 变量值
//代码段2--------------------------
var le = '变量值'; //声明变量并赋值
(function () {
console.log(le); //变量值
})();
//代码段3----------------------------
var le = '变量值'; //声明变量并赋值
(function () {
console.log(le); // undefined
var le = '内部变量值';
console.log(le); // 输出内部变量值
//声明变量并赋值 声明的le提升之作用域顶部
})();
//⬇ 等价于下面代码
//⬇ ⬇ ⬇ ⬇ ⬇ ⬇
//⬇ ⬇ ⬇ ⬇ ⬇ ⬇
//⬇ ⬇ ⬇ ⬇ ⬇ ⬇
//⬇ ⬇ ⬇ ⬇ ⬇ ⬇
var le = '变量值'; //声明变量并赋值
(function () {
var le; //局部变量和全局变量重名会覆盖全局变量 此时的le只有声明却未定义
console.log(le); // undefined
le = '内部变量值'; // 变量赋值
console.log(le); // 对新定义的变量赋值 输出内部变量值
})();
//更多
(function () {
console.log(le); //error报错 未声明le
le = '内部变量值';
})()
(function () {
le = '内部变量值';
console.log(le);//输出内部变量值,匿名函数自执行内部变量提升定义为全局变量
//函数内部定义的方法和变量,要等到函数执行过以后,才会真正定义
})()
//练习代码----------------------
var myvar = '变量值';
(function () {
console.log(myvar); // 变量值
myvar = '内部变量值';
console.log(myvar); // 内部变量值
})();
</script>
函数声明提升的优先级比变量提升还要高。
console.log(b);
console.log(b());
var b = 1;
function b() {
return 2;
}

本文详细探讨了JavaScript中的变量作用域、变量提升和函数提升的概念,通过代码示例解析了不同作用域下变量的声明和赋值行为。重点讲解了匿名函数自执行时如何影响变量的访问,并通过练习代码加深理解。同时,提到了函数声明提升的优先级高于变量提升的规则。

被折叠的 条评论
为什么被折叠?



