作用域
作用域简单来说就是变量能够访问的范围,离开了这个范围就不能被访问 ,作用域分为全局作用域 局部作用域 和块级作用域
全局作用与域 :是指在script标签内 在此声明的函数 在函数内部也可以被访问
局部作用域:局部作用域分为函数作用域和块级作用域
函数作用域: 在函数内部声明的只有在函数内部才能被访问
<script> // 声明 counter 函数 function counter(x, y) { // 函数内部声明的变量 const s = x + y console.log(s) // 18 } // 设用 counter 函数 counter(10, 8) // 访问变量 s console.log(s)// 报错 </script>
总结:
-
函数内部声明的变量,在函数外部无法被访问
-
函数的参数也是函数内部的局部变量
-
不同函数内部声明的变量无法互相访问
-
函数执行完毕后,函数内部的变量实际被清空了
块级作用域:let const 声明的 使用{}包裹的称为块级作用域 代码块内部声明的变量外部有可能无法访问
<script> { // age 只能在该代码块中被访问 let age = 18; console.log(age); // 正常 } // 超出了 age 的作用域 console.log(age) // 报错 let flag = true; if(flag) { // str 只能在该代码块中被访问 let str = 'hello world!' console.log(str); // 正常 } // 超出了 age 的作用域 console.log(str); // 报错 for(let t = 1; t <= 6; t++) { // t 只能在该代码块中被访问 console.log(t); // 正常 } // 超出了 t 的作用域 console.log(t); // 报错 </script>
总结:
-
let
声明的变量会产生块作用域,var
不会产生块作用域 -
const
声明的常量也会产生块作用域 -
不同代码块之间的变量无法互相访问
-
推荐使用
let
或const
-
注:开发中
let
和const
经常不加区分的使用,如果担心某个值会不小被修改时,则只能使用const
声明成常量。
作用域链
作用域的本质就是底层变量的查找机制 在函数执行时会优先在当前作用域中查找 如果当前作用域中查找不到 就向外层作用域中查找 这样一层层查找就形成了作用域链
标签:函数,作用域,什么,访问,let,声明,变量 From: https://www.cnblogs.com/JAG2671169285/p/16921570.html