<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;
}