作用域

概述

JavaScript作用域:就是代码名字在某个范围内起作用和效果
目的是为了提高程序的可靠性,更重要的减少命名冲突

全局作用域

整个script标签或者是一个单独的js文件

var num = 10;

局部作用域(函数作用域)

在函数内部就是局部作用域,这个代码名字只在函数内部起效果和作用

function  fn(){
   
	//局部作用域
	var num =20;
}

全局变量和局部变量

变量的作用域

全局变量

在全局作用域下的变量

var num = 10;
//num就是一个全局变量

局部变量

在局部作用域下的变量
后者在函数内部的变量就是局部变量

   <script>
        function fn1(){
   
            var num1 = 10;
        }
    </script>

num1就是局部变量,只能在函数内部使用

注意点

1.如果在函数内部没有声明,直接赋值的变量也属于全局变量
2.函数的形参也可以看作局部变量
3.从执行效率上来看:
(1)全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
(2)局部变量当程序执行完毕就会销毁,比较节约内存资源

JavaScript没有块级作用域

es6新增块级作用域
块级作用域就是有{},例如if{},for{}

作用域链

只要有代码,就有作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链

作用域链案例

    <script>
        function f1(){
   
            var num = 123;

            function f2(){
   
                console.log(num);
            }
            f2();
        }
        var num = 456;
        f1();
    </script>



结果a = 4,b = 22