AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
[TOC] # 作用域概述 就是代码名字(变量)在某个范围内起作用和效果 目的:是为了提高程序的可靠性更重要的是减少命名冲突 ![](https://img.kancloud.cn/58/ab/58abc6743197ba017ba67ca77b97035a_1052x105.png) ## 1、全局作用域: 整个script标签 或者是一个单独的js文件 ~~~ var num = 10; var num = 30; console .1og(num); ~~~ ## 2、局部作用域(函数作用域)在函数内部就是局部作用域这个代码的名字只在函数内部起效果和作用 ~~~ function fn() { //局部作用域 var num = 20; console . log(num); } fn(); ~~~ # 2、变量的作用域 ## 2.1变量作用域的分类 在JavaScript中,根据作用域的不同,变量可以分为两种: ●全局变量 ●局部变量 ### 1、全局变量: ![](https://img.kancloud.cn/a6/e8/a6e86ff7b4a9092faad382dc4814bbd1_781x250.png) 在全局作用域下的变量在全局下都可以使用 //**注意**如果在函数内部没有声明直接赋值的变量也属于全局变量 ~~~ var num = 10; // num就是一个全局变量 console . log(num); //调用不了 fn里的函数 function fn() { console .1og(num); } fn(); ~~~ ### 2.局部变量 ![](https://img.kancloud.cn/49/22/4922deb00dac06f71351c6ba121d242c_676x246.png) 在局部作用域下的变量 后者在函数内部的变量就是局部变量 //注意:函数的形参也可以看做是局部变量 ~~~ function fun(aru) { var num1=10;//num1就是局部变量只能在函数内部使用 num2 = 20; //没有声明 就是全局变量 } fun(); ~~~ ### 3.从执行效率来看全局变量和局部变量 ![](https://img.kancloud.cn/fe/aa/feaaa853ceefb8f8b5b6f5669eb1d36d_1096x246.png) //(1)**全局变量**只有**浏览器关闭**的时候才会**销毁**,比较**占内存资源** // (2)\*\* 局部变量**当我们**程序执行完毕**就会**销毁\*\*, 比较**节约内存资源** # 作用域链 (**就近原则**) ●只要是代码,就至少有一个作用域 ●写在函数内部的局部作用域 ●如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域 ●根据在内部函数可以访问外部函数变量的这种机制 ,用链式查找决定哪些数据能被内部函数访问,就称作作用域链 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值这种结构我们称为作用域链 ![](https://img.kancloud.cn/d4/33/d433d1dba3f92e6523fba61ecbc2a632_1429x472.png) # 作用域链实验 ## 结果是几? ![](https://img.kancloud.cn/cb/55/cb55511f4bd75cc77e3232e9d05d460f_902x654.png) ## 案例分析 ![](https://img.kancloud.cn/7b/8d/7b8d685955fa33f9ed3ac6848708f3ac_970x457.png) ## 2、结果是几? ![](https://img.kancloud.cn/ce/29/ce2958fc45916fbf5aa6dbdc49e55dc1_637x675.png)