当前位置: 首页 > news >正文

方法的入栈和出栈

一.作用域问题

1.全局作用域

在全局都能进行访问的变量

  var a = 10;function fn() {var b = 20;return a + b;}console.log(fn());

2.局部的作用域

只能在限定的范围内进行访问

 function fn() {var b = 20;}console.log(b);

 b is not defined 打印的结果是b这个变量没用定义

3.块级作用域

(1)使用var

  for (var i = 0; i <= 5; i++) {}console.log(i);

打印的结果是:6

(2)使用let

  for (let i = 0; i <= 5; i++) {}console.log(i);

i is not defined

这里使用let定义变量就使用到了es6的let语法,块级作用域,使用let定义的变量只能在let{}包裹的快中就行访问

4.作用域的查找规则

代码1:

   function fn() {var a = 10;return function fn1() {var a=11console.log(a);};}var b = fn();b()b()b()

首先在自己的作用域进行查找,如果没用找到就会往行上一级的作用域进行查找,直到找不为止。

代码2:

  function fn() {var a = 10;return function fn1() {console.log(a++);};}var b = fn();b()  //10b()  //11b()  //12


 

二.通过方法的进栈和出栈来看闭包

    function fn() {var a = 10;return console.log(a);}fn();fn();

fn方法入栈,在只想完毕后,就会销毁a这个变量。

  function fn() {var a = 10;return function fn1() {console.log(a++);};}var b = fn();b()  //10b()  //11b()  //12

这个方法调用fn函数,返回fn1这个函数但是fn1这个函数里面的变量a没有指向的对象,因此它指向fn函数的a=10,调用fn()函数按照以往的逻辑本应该将a这个变量进行销毁,返回的也是一个可调用的b函数,因为b函数中的a变量需要fn函数定义的变量,所以不会被销毁。

因此没调用一次fn函数a机会递增1,.这也是不建议使用必要的原因,因为会造成栈溢出

http://www.lryc.cn/news/341981.html

相关文章:

  • PHP介绍
  • 接口自动化测试之-requests模块详解
  • 低代码+定制物资管理:创新解决方案探析
  • 13 【PS作图】人物绘画理论-脸型
  • Python批量修改图片文件名中的指定名称
  • STM32点灯大师(点了一颗LED灯,轮询法)
  • 动态规划算法:路径问题
  • 盘一盘接口测试的那些痛点,你现在会解决了吗
  • 基于alpha shapes的边缘点提取(matlab)
  • C#三人飞行棋
  • Notes for the missing semester. Useful and basic knowledge about Linux.
  • 【信息系统项目管理师知识点速记】资源管理基础
  • Android性能优化面试题汇总
  • Ansible 自动化运维工具 - 了解和模块应用
  • AI神助攻!小白也能制作自动重命名工具~
  • (读书笔记-大模型) LLM Powered Autonomous Agents
  • 超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)
  • C语言实现贪吃蛇
  • 高可用系列四:loadbalancer 负载均衡
  • Ruby递归目录文件的又一种方法
  • 【爬虫】爬取A股数据写入数据库(一)
  • 1-38 流资源类结构
  • nginx的前世今生(二)
  • 浏览器跨域详解
  • 华为5700配置
  • 使用Axios从前端上传文件并且下载后端返回的文件
  • open 函数到底做了什么
  • ue引擎游戏开发笔记(32)——为游戏添加新武器装备
  • 【个人博客搭建】(17)使用FluentValidation 参数校验
  • 数据结构===散列表