方法的入栈和出栈

一.作用域问题

1.全局作用域

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

javascript 复制代码
  var a = 10;
    function fn() {
      var b = 20;
      return a + b;
    }
    console.log(fn());

2.局部的作用域

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

javascript 复制代码
 function fn() {
      var b = 20;
    }
    console.log(b);

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

3.块级作用域

(1)使用var

javascript 复制代码
  for (var i = 0; i <= 5; i++) {}
    console.log(i);
   

打印的结果是:6

(2)使用let

javascript 复制代码
  for (let i = 0; i <= 5; i++) {}
    console.log(i);

i is not defined

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

4.作用域的查找规则

代码1:

javascript 复制代码
   function fn() {
      var a = 10;
      return function fn1() {
         var a=11
         console.log(a);
      };
    }
    var b = fn();
    b()
    b()
    b()

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

代码2:

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

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

javascript 复制代码
    function fn() {
      var a = 10;
      return console.log(a);
    }
    fn();
    fn();

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

javascript 复制代码
  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,.这也是不建议使用必要的原因,因为会造成栈溢出

相关推荐
大个个个个个儿12 分钟前
vue3腾讯云直播 前端拉流(前端页面展示直播)
前端·javascript·腾讯云
Cutey91623 分钟前
实现可配置的滚动效果:JavaScript与CSS双方案
javascript·面试
喝西瓜汁的兔叽Yan25 分钟前
【常用功能】下载文件和复制到剪切板
前端·javascript
1024小神28 分钟前
tauri2 程序如何拿到启动参数?例如-toen
前端·javascript
FreeLikeTheWind.34 分钟前
Qt 开发时可以在函数内引用的头文件
开发语言·c++·qt
学会870上岸华师35 分钟前
c语言学习16——内存函数
c语言·开发语言·学习
码觉客37 分钟前
介绍一下基于 PDF.js 较新版本(接近或涵盖 v5.0 概念,虽然实际稳定版本可能是 v4.x)获取批注列表的方法
前端·javascript
顾洋洋37 分钟前
WASM与OPFS组合技系列二(魔改读操作)
前端·javascript·webassembly
@PHARAOH1 小时前
WHAT - React 两个重要的 Typescript 类型:ReactNode vs JSX.Element
javascript·react.js·typescript
PyAIGCMaster1 小时前
react从零开始的基础课
开发语言·javascript·ecmascript