理解以下代码:

function foo() {let n = 1return function bar() {let m = 1function show() {console.log('m:', ++m)console.log('n:', ++n)}show()}
}
let a = foo()
console.log(a)
a()
a()

首先看看这个a是个什么?

是返回回来的一个函数——a是一个函数
那么n和m哪个被保留了呢?


n被保留了,而m没有,每次调用a都会重新定义一个m出来。


更进一步

function foo() {let n = 1this.sum = function () {console.log(++n)}
}let a = new foo()
console.log(a)
a.sum()


这时n是否被保留了呢?

a.sum()
a.sum()
a.sum()

每次new的时候才开辟一块新的内存来存放这个东西,如下:

let a = new foo()
console.log(a)
a.sum()
a = new foo()
a.sum()
a.sum()

[JavaScript] 函数作用域问题相关推荐

  1. 浅谈JavaScript 函数作用域当中的“提升”现象

    在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " ...

  2. JavaScript函数作用域

    JavaScript函数作用域 JavaScript作用域 作用域: 作用域指一个变量的作用范围 JS中一共两种作用域: (1)全局作用域 (2)函数作用域(局部作用域) 1.全局作用域 直接写在sc ...

  3. javascript函数作用域与闭包

    8.8. 函数作用域与闭包        如第四章所述,JavaScript函数的函数体在局部作用域中执行,局部作用域不同于全局作用域.本章将解释这些内容和相关的作用域问题,包括闭包.[*] [*] ...

  4. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  5. JavaScript从作用域到闭包

    目录 作用域 全局作用域和局部作用域 块作用域与函数作用域 作用域中的声明提前 作用域链 函数声明与赋值 声明式函数.赋值式函数与匿名函数 代码块 自执行函数 闭包  作用域(scope) 全局作用域 ...

  6. javascript中函数作用域和声明提前

    javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的 ...

  7. 七、深入JavaScript函数,对象和作用域(三)

    @Author:Runsen @Date:2020/5/26 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...

  8. JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  9. JavaScript 函数(作用域以及闭包)

    JavaScript 函数(作用域以及闭包) ・执行环境及作用域 执行环境定义了变量或函数有权访问的其他数据. 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量或函数都保存在这个对象中, ...

最新文章

  1. 让你的 conda “回滚”到以前版本的环境
  2. Apache CXF实现WebService发布和调用
  3. vuejs之【router-link】大全(二)
  4. java 模板方法设计模式_Java中的模板方法设计模式
  5. C#中的equals()和==
  6. 学 Python 最大的 1 个误区,看看你中招了吗?
  7. 面试官问我:如何减少客户对交付成果的质疑
  8. Visual Studio 2008创建项目(ATL)
  9. SQL Server 分离
  10. Zend Optimizer not installed可能原因及解决方法
  11. linux centOS可视化界面
  12. PS · class 1
  13. C语言数组比较相等memcmp,使用memcmp比较两个变量结果一定吗?
  14. linux系统的wps办公软件,wps32位/64位linux版办公软件-WPS Office 2019 For Linux下载V11.1.0.10161官方版-西西软件下载...
  15. PowerApps 连接Azure Sql
  16. 物联网 | HASS+MQTT+树莓派室内监测小型物联网系统
  17. 限时免费 | 12月6日,广州保利洲际酒店,ABC Summit 2018云智峰会来了!
  18. 数码管识别c语言代码,OpenCV之七段数码管识别(含代码)
  19. blackberry j2me 发送SMS短信
  20. 推荐 Mac 平台上常用的 5 款 PDF 阅读编辑软件

热门文章

  1. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成
  2. 手撸一个JdbcTemplate,带你了解其原理
  3. TensorFlow XLA优化与Memory
  4. 关键任务应用程序依赖于故障保护存储器
  5. CVPR2020:三维点云无监督表示学习的全局局部双向推理
  6. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet
  7. ValueError: invalid literal for int() with base 10: “ ”
  8. Android 跳转Activity 的时候出现闪屏问题处理
  9. error: unbound prefix. Message{kind=ERROR, text=error: unbound prefix., sources=[E:\work\me\fragment
  10. mysql 查看表结构,字段的基本信息(简单明了)。