<script>
//什么是块级作用域:就是es6提供的作用域,类似局部作用域
//用大括号{}配合let/const使用就会生成独立的块级作用域
//但是这种方式对var没用,var仍然是在全局中
{
var a=1;
const b=2;
let c=3;
console.log('...');
}
</script>
断点后发现var不在let和const形成的块级作用域中
<script>
var d=1;
function g() {
var d=2;
//函数自调用要在前面加分号
(function(){
var d=3
console.log(d);
})()
}
g();
/*
作用链就是输出的变量会就近输出,自调用没有这个变量就函数找,函数没有这个变量就全局找
问题:undefine和undeclare的区别:前者是定义了变量没有值;后者是没有定义变量
*/
//l练习:
var a=10
function b(){
a=20
console.log(a);
}
b();
console.log(a);
/*
错误理解:
var a
function b(){
a=20
console.log(a);
}
a=10;
b();-->20
console.log(a);-->10
*/
/*
正确理解:
函数内没有var a所以函数到全局中找,找到了var a
所以函数内输出的是20,
问题:1.为什么a=10没有覆盖a=20????-->a
2.全局作用域可以用局部作用域的东西吗?-->全局作用域不能用函数作用域的东西
但是由于var a不是在函数里面var的,所以函数内的a=20实际上覆盖了全局的a=10
所以会导致全局的a输出的时候也是20
*/
</script>