js经典试题之闭包

1:以下代码输出的结果是?

function Foo(){
var i=0;
return function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();

答案:0 1 0

解析: 这是一个闭包,闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 
这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加1,但是相互之间不影响,因此结果是0

2:以下代码输出的结果是?

function test() {
var n = 4399
function add() {
n++
console.log(n)
}
return {n:n, add:add}
}
var result1 = test()
var result2 = test()
result1.add()
result1.add()
console.log(result1.n)
result2.add()

答案:4400 4401 4399 4400

解析:

test构成了一个闭包,result跟result2各自有自己的test作用域,所以最后result2.add()结果是4400

前两个没啥好说的,懵逼点在第三个,这里{n:n}是对变量n里的值进行缓存,而不是本身n这个指针变量,这样生成add的时候n指向的值是多少{n:n}里的值就是多少(这里返回的对象是个深拷贝)

js经典试题之闭包的更多相关文章

  1. js经典试题之常用的方法

    js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...

  2. js经典试题之运算符的优先级

    js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...

  3. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

  4. js经典试题之w3规范系列

    js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...

  5. js经典试题之原型与继承

    js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...

  6. js经典试题之数组与函数

    js经典试题之数组与函数 1:列举js的全局函数? 答案:JavaScript 中包含以下 7 个全局函数escape( ).eval( ).isFinite( ).isNaN( ).parseFlo ...

  7. js经典试题之数据类型

    js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...

  8. 一道经典的js面试题

    # 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...

  9. 一道经典JS面试题

    超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到.这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示? 不起眼的开始 招聘前端工程师,尤其是中高级前端 ...

随机推荐

  1. shell定时统计Nginx下access.log的PV并发送给API保存到数据库

    1,统计PV和IP 统计当天的PV(Page View) cat access.log | sed -n /`date "+%d\/%b\/%Y"`/p |wc -l 统计某一天的 ...

  2. webpack安装与使用

    webpack: JavaScript 应用程序的静态模块打包器 安装webpack前需要搭建node环境: 1. 安装node.js(https://nodejs.org/en/), 安装完后会自动 ...

  3. 高性能MySQL--innodb中事务的隔离级别与锁的关系

    最近买了<高性能MySQL>这本书回来看,从中收益颇多!我来一吐为快! 我们都知道事务,那么在什么情况下我们需要使用事务呢? 银行应用是解释事务的一个经典例子.假设一个银行的数据库有两张表 ...

  4. 【Spark】Spark核心之弹性分布式数据集RDD

    1. RDD概述 1.1 什么是RDD (1) RDD(Resilient Distributed Dataset)弹性分布式数据集,它是Spark的基本数据抽象,它代表一个不可变.可分区.里面的元素 ...

  5. Fax Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk.Que ...

  6. Python安装及简介

    Python简介 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  7. ruby中url解码并替换非法字符

    url中中文字符解码 str = URI.decode(url_str) 替换非法字符 if ! str.valid_encoding? p str = str.encode("UTF-16 ...

  8. JavaWeb——库存管理系统(2).java部分---18.12.13

    DBUtil.java package com.hjf.util; import java.sql.Connection;import java.sql.DriverManager;import ja ...

  9. The 2018 ACM-ICPC Asia Qingdao Regional Contest K XOR Clique

    K XOR Clique BaoBao has a sequence a​1​​,a​2​​,...,a​n​​. He would like to find a subset S of {1,2,. ...

  10. thinkphp5保存远程图片到本地

    代码 protected function saveImg($imgUrl){ $ext=strrchr($imgUrl,'.'); if(!in_array($ext,['.jpg','.png', ...