首页 > 其他分享 >什么是作用域 什么是作用域链

什么是作用域 什么是作用域链

时间:2022-11-24 13:45:27浏览次数:31  
标签:函数 作用域 什么 访问 let 声明 变量

作用域

作用域简单来说就是变量能够访问的范围,离开了这个范围就不能被访问 ,作用域分为全局作用域  局部作用域 和块级作用域

全局作用与域 :是指在script标签内 在此声明的函数 在函数内部也可以被访问

局部作用域:局部作用域分为函数作用域和块级作用域

函数作用域:  在函数内部声明的只有在函数内部才能被访问

 

<script>
  // 声明 counter 函数
  function counter(x, y) {
    // 函数内部声明的变量
    const s = x + y
    console.log(s) // 18
  }
  // 设用 counter 函数
  counter(10, 8)
  // 访问变量 s
  console.log(s)// 报错
</script>

 

总结:

  1. 函数内部声明的变量,在函数外部无法被访问

  2. 函数的参数也是函数内部的局部变量

  3. 不同函数内部声明的变量无法互相访问

  4. 函数执行完毕后,函数内部的变量实际被清空了

 

块级作用域: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>

总结:

  1. let 声明的变量会产生块作用域,var 不会产生块作用域

  2. const 声明的常量也会产生块作用域

  3. 不同代码块之间的变量无法互相访问

  4. 推荐使用 letconst

  5. 注:开发中 letconst 经常不加区分的使用,如果担心某个值会不小被修改时,则只能使用 const 声明成常量。

作用域链

作用域的本质就是底层变量的查找机制  在函数执行时会优先在当前作用域中查找 如果当前作用域中查找不到 就向外层作用域中查找 这样一层层查找就形成了作用域链

标签:函数,作用域,什么,访问,let,声明,变量
From: https://www.cnblogs.com/JAG2671169285/p/16921570.html

相关文章

  • 工业交换机那么贵,为什么那么多人都在用?
    工业交换机具有电信级性能特征,可耐受严苛的工作环境。产品系列丰富,端口配置灵活,可满足各种工业领域的使用需求。假如工业交换机跟普通商用交换机的功能一样,但是普通交换机价......
  • Spring @CrossOrigin注解原理是什么
    问题起源在Postman调用接口中,忘记设置Origin,发现@CrossOrigin未生效(响应头没有cors的)在filter中设置了Access-Control-Allow-Origin发现@CrossOrigin未生效(响应头没有co......
  • 为什么要设置需求优先级?如何设置?
    本文将围绕以下问题展开:1、什么是需求优先级排序,目的是什么?2、优先级排序的8大依据;3、需求优先级排序面临的挑战;4、一些优秀的需求优先级排序工具。 一、什么是需求优......
  • python主要可以做什么
    python主要可以做Web和Internet开发、科学计算和统计、桌面界面开发、软件开发、后端开发等领域的工作。Python是一种解释型脚本语言。Python可以应用于众多领域,如:数据分......
  • day20221124今天学会了什么?
    day20221124周四学习方法:看文献学习,阅读。看视频学习,泡进代码。学呗,不会就问。手把手教。》工作技术最重要:今天计划做什么任务?今天学会了什么?做PPT》明天学会了什么......
  • 实体类编写时需要注意的细节——为什么字段需要用包装类型而不用基本数据类型
    最近在学习做微服务的项目,总结了一些平常没有注意到的细节,记录于此实体类涉及到的属性如果是int这样的基本数据类型,那么要使用其包装类型,因为包装类型默认为null,而基本......
  • 函数作用域、内置函数
    一、函数作用域1:变量的声明:例如:a="test"print(a)2:函数里面的变量不声明可以吗? 可以:例如 def(a,b): #形参,暂位置的  形参不叫声明 returna+b3:局部变量:......
  • Java实体类为什么需要序列化和反序列化
    最近在学习做微服务的项目,在参考他人的微服务项目时,发现数据库表所对应的实体类都会实现Serializable接口,以往做的项目中并没有遇到过,也没有实现过这个接口,所以好奇实体类......
  • web前端开发用什么编辑工具好?
    现在市面上的前端开发工具数不胜数,令人眼花缭乱,作为半吊子入坑的前端开发人员,下面分享一些自己的工具使用库。  当涉及到开发工具时,肯定避不开编辑器:  SublimeText......
  • Net Zero Cloud是什么?一文带你了解Salesforce净零云
    世界正处于气候危机之中,减少碳排放的需求从未如此紧迫。但是,跟踪企业的所有价值链排放量是一个复杂而繁琐的过程。监管机构、投资者和客户越来越多地敦促企业立即实现净......