涉及知识点:变量提升、块级作用域、闭包
参考文档:
(1)变量提升,很简单,就是把变量提升提到
函数的top
的地方。我么需要说明的是,变量提升只是提升变量的声明,并不会把赋值也提升上来
。
(2)函数提升是把整个函数都提到前面去。
(3)函数提升优先于变量提升
。
代码解析:
<script>
console.log(typeof a);
a();
var a = 3;
function a() {
console.log(typeof a);
}
console.log(typeof a);
a = 6;
a();
// 输出结果为: function function number "a is not a function"
// 解析后的代码实际长这样:
// var a;
// function a() {
// console.log(typeof a);
// }
// console.log(typeof a); // function
// a(); // function
// a = 3;
// console.log(typeof a); // number
// a = 6;
// a();// "a is not a function"
</script>
<script>
// 变量提升&闭包&作用域
var v='Hello World';
(function(){
console.log(v); // undefined
var v='I love you';
})()
</script>
<script>
var x = 1;
console.log(x); // 1
if (true) {
var x = 2;
console.log(x); //2
}
console.log(x);// 2
</script>
<script>
let x = 1;
console.log(x); // 1
if (true) {
let x = 2;
console.log(x); // 2
}
console.log(x); // 1
</script>
<script>
var x = 1;
console.log(x); // 1
if (x) {
(function () {
var x = 2;
console.log(x); // 2
}());
}
console.log(x); // 1
</script>