var a = 2;
var func = (function(){

var a = 3;
return function(){a++;console.log(a);
}

})();

func();
func();

1.涉及的知识点:
(1)JS变量的作用域
(2)闭包
2.变量的作用域,通俗来说就是变量所能起到作用的范围,也就是变量能被访问到的范围。
对于变量的作用域的理解,有一下几点需要了解的:
(1)变量的作用域不是“块级”,而是以“函数”为作用域

 这个所说的的“块级”,指的是距离“代码”最近的代码块。比如举个C#的例子:public void Param(){var a = 1;if(a==1){var b = c;}}变量a的作用域就是 Param()这个代码快,而变量b的作用域的作用域就是if所表示的代码块。来看个JavaScript的例子:function param () {{var a = "liyunhua"}console.log(a); // 输出 liyunhua}console.log(a) // error变量a在params()中都是可以被访问的,而出了param()的范围就会报错。

(2)变量的覆盖:“一个作用域中存在一个与外层作用域的同名变量,那么在内部作用域以及其内部的所有的作用域中都访问不到外面的变量”--摘自《深入理解JavaScript》

        这句话还是比较好理解的。这里就不做解释了。理解了上面的两点,那么在立即执行函数表达式(IIFE)中,a的初始值就是3,并且不会影响到外部作用域变量a的值。执行函数(IIFE)中,a的初始值就是3,并且不会影响到外部作用域变量a的值。
3.闭包闭包的东西太多,这里就以题论题,不会过多地讲述闭包的知识点。有兴趣的朋友,可以去这个链接了解 (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures)。这里说闭包的一个作用:使函数可以维持其创建时所在作用域。怎么理解这句话呢?也就是说一个函数离开了“创建时的作用域”,但是其还是会和这个作用域以及这个函数外部的作用域相关联,也就是说“变量”依旧是那个“变量”以这个题目为参照,那么结果就很明了了。

一个考查作用域以及闭包的题目相关推荐

  1. 函数作用域,闭包,数据类型的题目

    第一题:函数作用域和闭包 var a = 9 function fn(){a = 0return function (b){return b+a++} } var f = fn() console.l ...

  2. 异步、作用域、闭包--setTimeout在for循环中的思考

    题目: for(var i=0;i<=3;i++){ setTimeout(function() {  console.log(i)  }, 10);} 理想答案是输出:0,1,2,3 实际答案 ...

  3. 前端进击的巨人(三):从作用域走进闭包

    进击的巨人第三篇,本篇就作用域.作用域链.闭包等知识点,一一击破. 作用域 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符( ...

  4. 让“作用域和闭包”说人话

    整理自<你不知道的JavaScript(上卷)>,整篇总结围绕着以下两句话: ① "生米煮成熟饭"--赋值可以跑在声明前,反正声明会提升: ② 闭包是一个保留访问作用域 ...

  5. 【一天时间|JavaScript基础】作用域和闭包

    一天时间系列文章是博主精心整理的面试热点问题和难点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速并高效地审视前端面试知识.直击技术痛点,主动出击,精密打击,这才是面试拿到高薪的秘诀 ...

  6. 你不懂的JS学习笔记(作用域和闭包)

    You don't KnowJS 引语:你不懂的JS这本书github上已经有了7w的star最近也是张野大大给我推荐了一波,阅读过之后感觉对js的基础又有了更好的理解.本来我是从来不这种读书笔记的, ...

  7. 什么是闭包?变量作用域和闭包。

    变量作用域和闭包 变量作用域 当我们写 js 文档的时候经常会设置变量,变量的类型有两种: 全局变量 局部变量 这两种类型的变量有者不同的作用范围,全局变量的作用范围是面向整个文档的,可以称之为全局作 ...

  8. javascript函数作用域与闭包

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

  9. JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang

    一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有 ...

最新文章

  1. mysql物理文件组成
  2. 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Minimax策略...
  3. DuckChat聊天系统PHP,部署自己的聊天系统 DuckChat(鸭信)仿微信 PHP源码
  4. iinflux数据库使用
  5. hdu 4150 Powerful Incantation
  6. fedora20开机启动配置:systemctl
  7. ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol
  8. mysql5.7服务端安装_windows安装 MySQL5.7服务端-Go语言中文社区
  9. java的安装包下载 百度云_Java开发相关安装包网盘下载链接分享
  10. 电大网络教育计算机应用基础,(热)最新电大奥鹏远程网络教育计算机应用基础题库.doc...
  11. win10上不了网服务器未响应,win10的DNS 服务器未响应
  12. 深入理解Camera 基础知识点
  13. 本地应用程序_本地化PHP应用程序的“正确方法”,第4部分
  14. 湖仓一体电商项目(一):项目背景和架构介绍
  15. 51单片机数码管循环显示0 9c语言,如何采用单片机实现数码管循环显示0-9
  16. ubuntu 20.04 设置DNS
  17. 盘点3种生涯的决策类型和方法,看看你是哪种类型?|【生涯荐读】
  18. PHP 随机生成电话号码、用户名字
  19. JAVA中类scanf的使用方法
  20. 微软WindowsPhone7.5发布会图文实录windowsphone

热门文章

  1. NOIP模拟题——B
  2. IOS中CoreLocation框架地理定位
  3. 关于登录记住密码使用cookie的详解
  4. 引擎设计跟踪(九.14.2i) Android GLES 3.0 完善
  5. iOS学习之路十三(动态调整UITableViewCell的高度)
  6. sina微博api源码阅读之函数
  7. C#优化字符串操作【月儿原创】
  8. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
  9. 【Python】解决print不能立即打印的问题
  10. in the java search_Search API – Using scrolls in Java - Elasticsearch Java API 手册