方法的入栈和出栈

一.作用域问题

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=11
         console.log(a);
      };
    }
    var b = fn();
    b()
    b()
    b()

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

代码2:

  function fn() {
      var a = 10;
      return function fn1() {
        console.log(a++);
      };
    }
    var b = fn();
    b()  //10
    b()  //11
    b()  //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()  //10
    b()  //11
    b()  //12

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/595673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[JUCE库]关于JUCE如何生成动态链接库 juce-7.0.1-windows

前言 当我们在使用JUCE库的时候&#xff0c;可能会需要使用到静态链接的方式&#xff0c;还好的一点是JUCE本身提供了CMake编译&#xff0c;也提供了单独的sln编译。 本文章仅针对juce-7.0.1-windows&#xff0c;由于不同版本之间差异较大&#xff0c;可能不能通用&#xff0…

Unity数据持久化之XML

目录 数据持久化XML概述XML文件格式XML基本语法XML属性 C#读取存储XMLXML文件存放位置C#读取XML文件C#存储XML文件 实践小项目必备知识点XML序列化&#xff08;不支持字典&#xff09;XML反序列化IXmlSerializable接口让Dictionary支持序列化反序列化 数据持久化XML概述 什么是…

redis进阶--IDEA环境

目录 一、解决redis服务器端口问题 二、java环境下使用redis 三、javaSpringt环境下使用redis 四、redis持久化 1、持久化概念 2、redis持久化策略 3、RDB策略 4、AOF策略 5、混合持久化策略 五、redis事务 1、数据库事务 2、redis事务特点 3、redis事务的作用 4…

jquery项目 html使用export import方式调用模块

jquery的老项目&#xff0c;引入vue3, 需要方便使用export, import方式引用一些常用的方法与常量 导出模块 export js/numberUtil.js /*** Description:* Author Lani* date 2024/1/10*//* * 【金额】 保留2位小数&#xff0c;不四舍五入 * 5.992550 >5.99 , 2 > 2.…

Linux字符设备驱动(二) - 与设备驱动模型的关系

一&#xff0c;从/dev目录说起 从事Linux嵌入式驱动开发的人&#xff0c;都很熟悉下面的一些基础知识&#xff0c; 比如&#xff0c;对于一个char类型的设备&#xff0c;我想对其进行read wirte 和ioctl操作&#xff0c;那么&#xff1a; 1&#xff09;我们通常会在内核驱动中…

2024-05-06 问AI: 介绍一下深度学习中的LSTM网络

文心一言 当谈到深度学习中的LSTM&#xff08;Long Short-Term Memory&#xff09;网络时&#xff0c;它是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;旨在解决传统RNN在处理长序列时遇到的梯度消失和梯度爆炸问题。LSTM网络因其能够捕捉序列数据中的…

VTK —— 三、简单操作 - 示例1 - 3D点之间的平方距离和欧几里得距离(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…

如何使用resource-counter统计跨Amazon区域的不同类型资源数量

关于resource-counter resource-counter是一款功能强大的命令行工具&#xff0c;该工具基于纯Python 3开发&#xff0c;可以帮助广大研究人员跨Amazon区域统计不同类型资源的数量。 该工具在统计完不同区域的各类资源数量后&#xff0c;可以在命令行中输出并显示统计结果。res…

【C++ | 语句】条件语句(if、switch)、循环语句(while、do while、for、范围for)、跳转语句、try语句块和异常处理

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-02 2…

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架&#xff0c;用于快速生成一个Vue项目模板 提供功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境&#xff1a;NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs&#xff08;已经安装就不用了&#xff09; node-…

【PuTTY/PuttyGen创建密钥及利用密钥登录服务器】

PuTTY/PuttyGen创建密钥及利用密钥登录服务器http://t.csdnimg.cn/n7kJ9

W801学习笔记十九:古诗学习应用——下

经过前两章的内容&#xff0c;背唐诗的功能基本可以使用了。然而&#xff0c;仅有一种模式未免显得过于单一。因此&#xff0c;在本章中对其进行扩展&#xff0c;增加几种不同的玩法&#xff0c;并且这几种玩法将采用完全不同的判断方式。 玩法一&#xff1a;三分钟限时挑战—…

SpringBoot自动连接数据库的解决方案

在一次学习设计模式的时候&#xff0c;沿用一个旧的boot项目&#xff0c;想着简单&#xff0c;就把数据库给关掉了&#xff0c;结果报错 Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. 没有数据库的需…

75.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-伪造服务端更新属性消息欺骗客户端

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

IRFBC30PBF 进口原装现货 TO-220直插 N沟道 600V/3.6A 场效应管

IRFBC30PBF是一款通用型高性能MOSFET&#xff0c;它可以应用于多种电子和电力电子设备中。以下是一些可能的应用案例&#xff1a; 1. 开关电源&#xff1a;在开关电源设计中&#xff0c;IRFBC30PBF可以作为高频开关来控制电源的通断&#xff0c;实现电压转换和电流控制。 2. …

自动驾驶融合定位系列教程四:惯性导航解算

自动驾驶融合定位系列教程四&#xff1a;惯性导航解算 一、概述 惯性导航的解算是一个实现起来非常简单&#xff0c;但是理解起来要费一番功夫的东西&#xff0c;所谓“实现”就是把公式变成代码&#xff0c;所谓“理解”&#xff0c;就是要弄明白几个公式是怎么推导出来的。…

【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs

文章目录 1.内核函数调用堆栈&#xff1a;4个函数2.printk&#xff1a;cat /proc/cmdline查看consolettyS03.动态打印&#xff1a;printk是全局的且只能设打印等级&#xff0c;动态打印可控制选择模块的打印&#xff0c;在内核配置打开CONFIG_DYNAMIC_DEBUG4.ftrace&#xff1a…

【考研数学】武忠祥「基础篇」如何衔接进入强化?

如果基础篇已经做完&#xff0c;并且讲义上的例题也都做完了&#xff0c; 那下一步就是该做题了 这个时候&#xff0c;不能盲目做题&#xff0c;做什么题很重要&#xff01;我当初考研之前&#xff0c;基础也很差&#xff0c;所以考研的时候选了错误的题集&#xff0c;做起来就…

AI+客服行业落地应用

一、客服行业变迁 1.传统客服时代 &#xff08;1&#xff09;客服工作重复性高&#xff0c;技术含量低 &#xff08;2&#xff09;呼出效率低&#xff0c;客服水平参差不齐 &#xff08;3&#xff09;管理难度高&#xff0c;情绪不稳定 &#xff08;4&#xff09;服务质量…

偏微分方程算法之椭圆型方程差分格式编程示例

目录 一、示例1-五点菱形格式 1.1 C代码 1.2 计算结果 二、示例2-九点紧差分格式 2.1 C代码 2.2 计算结果 三、示例3-二阶混合边值 3.1 C代码 3.2 计算结果 本专栏对椭圆型偏微分方程的三种主要差分方法进行了介绍&#xff0c;并给出相应格式的理论推导过程。为加深对…
最新文章