块级作用域
<body>
<script>
// js两种作用域
//全局作用域,在函数外面let变量
//全局作用域,在函数里面let变量
if (1) {
let age = 19
console.log(age);
}
for (let i = 0; i < 6; i++) {
console.log('循环内部;'+i);
}
console.log('循环外部;'+i);
</script>
</body>
<body>
<script>
//【全局作用域】
//在代码中任意地方都能访问到的对象拥有全局作用域。
//(即在全局作用域中定义的变量可以在任何地方使用。)
//全局作用域在页面打开时创建,在页面关闭时销毁。
//【情况一:所有未定义直接赋值的变量自动声明为拥有全局作用域】
function Fun1(){
a = '未定义直接赋值的变量';
var b='内层变量'
}
Fun1();
conso1e.log(a);//未定义直接赋值的变量
console.log(b);//b is not defined
//注意:如果一个变量在声明的时候没有使用关键字。
//例如:um=10,此时这个变量无论写在哪里都是全局变量。
//但是这是非常不规范的,千万不要这么写,否则以后代码可能会出现bug。
//【情况二:最外层函数和最外层函数外面定义的变量拥有全局作用域】
var A='最外层变量';//最外层变量
function outFun(){//最外层函数
var B= '最外层函数的内层变量'
function innnerFun(){//内层函数
var C= '内层函数的内部变量'
}
}
console.log(A);//最外层变量
//console.log(B);//B is not defined
outFun()
innerfun()//innerfun is not defined
//console.log(C);//c is not defined
//【情况三:所有window对象的属性拥有全局变量】
//在全局作用域中有一个全局对象window,他代表的浏览器的窗口,由浏览器创建。
//一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location
</script>
</body>
作用域链
<body>
<script>
let num =10
function fn1(){
let num =20;
console.log(num);
function fn2(){
let num =30;
console.log(num);
}
fn2()
}
fn1()
console.log(num);
</script>
</body>
·匿名函数
<body>
<script>
//【匿名函数】
//没有函数名的函数。
//具名函数
function fn(){
console.log('999');
}
fn()
//匿名函数
let fn1 = function(){
console.log('333');
}
//fn1()
//执行匿名函数:自执行语法
//自执行语法:(匿名函数)()
(function (){
let num = 10
console.log('111');
})
</script>
</body>