1. 作用域
1.1 作用域的概述
通常来说 一段程序代码中所用到的名字并不总是有效和可用的。而跟定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序的逻辑性的局部性。增强了程序的可靠性,减少了名字冲突。
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> //JS作用域:就是代码(变量)名字在某个范围内起作用和效果 目的是提高程序的可靠性和减少程序命名冲突 //JS作用域在(es6)之前分为 全局作用域和局部作用域 //1. 全局作用域 整个script标签都有用或者是一个单独的JS文件. var num = 10; console.log(num);//10 //2. 局部作用域 在函数内部就是局部作用域 这个代码的名字只在函数内部起作用 function fn() { //局部作用域 var num = 0; console.log(num);//0 } fn(); </script> </head>
2 变量的作用域
2.1 变量作用域的分类
在JavaScript中 根据作用域的不同 变量可以分为两种:
1.全局变量
2.局部变量
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> //根据作用域的不同 我们变量分为全局变量和局部变量 // 1 全局变量 在整个Script标签中或者整个js文件中都可以使用 // 注意 如果在函数内部 没有声明 直接赋值的情况 也属于全局变量 但是必须在函数执行后才能有效 var num = 10; //全局变量 console.log(num); function fn() { console.log(num); } fn(); //2 局部变量 在局部作用域下的变量 //注意 函数的形参也是局部变量 function fun() { //局部变量 函数外部不能使用 var sum = 0; sum2 = 20; } // fun(); console.log(sum2); //从执行效率来看全局变量和局部变量 //1. 全局变量只有浏览器关闭时 才会销毁 比较占内存资源 //2. 局部变量 当我们程序执行完毕 就会销毁 比较节约内存资源 </script> </head>
js没有块级作用域 但是在es6之后才有了块级作用域 比如OC或者Swift中的{}中声明的变量 作用域就是在花括号中 就是块级作用域。
但是在JS中es6之前没有。
3 作用域链
只要是代码 就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数 那么在这个作用域中又可以诞生一个作用域
根据内部函数可以访问外部函数变量的机制 用链式查找决定哪些数据能被内部函数访问 就称为作用域链