js面试题知识点全解(一闭包)

闭包使用场景:
1.函数作为返回值,如下场景

 1 function F1(){
 2     var a = 100 //自由变量
 3     //返回一个函数(函数作为返回值)
 4     return function(){
 5         console.log(a) //a是定义的时候 的作用域,不是执行的时候的作用域,为100
 6     }
 7 }
 8 //f1得到一个函数
 9 var f1 = F1()
10 var a = 200 //全局作用域,不影响函数内作用域
11 f1()

2.函数作为参数传递

 1 function F1(){
 2     var a = 100 //自由变量
 3     return function(){
 4         console.log(a) //自由变量,父作用域寻找
 5     }
 6 }
 7 var f1 = F1()
 8 function F2(fn){
 9     var a =300
10     fn()
11 }
12 F2(f1) //输出100

3.实际开发中闭包的应用:
闭包实际应用中主要用于封装变量,收敛权限

 1 function isFirstLoad(){
 2     var _list = [] //放在函数内部,封装变量,使外部无法修改
 3     return function (id){
 4         if (_list.indexOf(id) >= 0){ //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。
 5             return false
 6         }else{
 7             _list.push(id)
 8             return true
 9         }
10     }
11 }
12
13 //使用
14 var firstLoad = isFirstLoad()
15 firstLoad(10) //true
16 firstLoad(10) //false
17 firstLoad(20) //true

实例:创建10个a标签,点击哪个弹出哪个数字

错误写法:

 1 //错误写法
 2 var i,a
 3 for( i = 0; i<10; i++){
 4     a = document.createElement(‘a‘)
 5     a.innerHTML=i+‘<br/>‘
 6     a.addEventListener(‘click‘,function(e){
 7         e.preventDefault() //preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交)。
 8         alert(i) //i都是10,i是自由变量,要去父作用域(全局作用域)获取值,此时i已执行完,值为10
 9     })
10     document.body.appendChild(a)
11 }

正确写法:

 1 var i
 2 14 for( i = 0; i<10; i++){
 3 15     (function(i){
 4 16         var    a = document.createElement(‘a‘)
 5 17         a.innerHTML=i+‘<br/>‘
 6 18         a.addEventListener(‘click‘,function(e){
 7 19             e.preventDefault() //preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交)。
 8 20             alert(i)
 9 21         })
10 22         document.body.appendChild(a)
11 23     })(i) //创建一个自执行函数
12 24 }
时间: 2024-10-09 22:20:35

js面试题知识点全解(一闭包)的相关文章

js面试题知识点全解(一作用域和闭包)

问题: 1.说一下对变量提升的理解 2.说明this几种不同的使用场景 3.如何理解作用域 4.实际开发中闭包的应用 知识点: js没有块级作用域只有函数和全局作用域,如下代码: if(true){ var name='killua' //把name定义在块里和放在外面是一样的,等同于在外面声明一个变量name,在块内给name赋值 }//同等于下面的代码 //建议用下面方式写 var name if(true){ name='killua' } console.log(name) //打印出来

js面试题知识点全解(一原型和原型链1)

1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型链5.instanceof 讲解: 构造函数:一般函数为大写字母开头的都是构造函数,如下: function Foo(name,age){ this.name=name this.age=age //return this }var f = new Foo('L',20) ; //构造函数形成实例,

Js中this机制全解

JavaScript中有很多令人困惑的地方,或者叫做机制. 但是,就是这些东西让JavaScript显得那么美好而与众不同. 比方说函数也是对 象.闭包.原型链继承等等,而这其中就包括颇让人费解的this机制. 不管是新手还是老手,不仔细深抠一下还真闹不明白this倒地咋回事捏. 今天,我们 就一起看一下this倒地咋回事,别再为了this发愁了. this是啥?         简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是thi

《Java面试全解析》1000道面试题大全详解(转)

<Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃了阿里钉钉团队的 offer 回到了西安. 从 2015 年四月开始在一家上市公司担任研发经理的职位,至今也快 5 年了,一路上见了很多也面试了很多人技术人,大部分面试的结果很令我沮丧,这也是我出这本书的原因之一,帮助更多的人搞懂技术最核心的知识. 为了写好这个专栏内容,我先后拜访了一二十家互联网公司,与不同

【前端芝士树】Vue.js面试题整理 / 知识点梳理

[前端芝士树] Vue.js 面试题整理 MVVM是什么? MVVM 是 Model-View-ViewModel 的缩写. Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑. View 代表UI 组件,它负责将数据模型转化成UI 展现出来. ViewModel 监听模型数据的改变和控制视图行为.处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View. 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewM

php高级面试题知识点(转载)

php高级面试题知识点大全 时间:2016-01-26 06:36:22来源:网络 导读:php高级面试题知识点大全,本套面试题内容包括php魔术方法.php单点登录.linux基本命令.前端开发技术等,不错的php面试题. php高级工程师面试题 1,基本知识点http协议中几个状态码的含义:503 500 401 200 301 302...include require include_once require_once 的区别.php/mysql中几个版本的进化史,比如mysql4.0到

剑指Offer——当当+搜狐+好未来笔试题+知识点总结

剑指Offer--当当+搜狐+好未来笔试题+知识点总结 情景回顾 时间:2016.9.21 15:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:当当笔试.搜狐笔试.好未来笔试 3场笔试中好未来相对简单点. 好未来编程题 马踏棋盘(贪心算法) ??马踏棋盘是经典的程序设计问题之一,主要的解决方案有两种:一种是基于深度优先搜索的方法,另一种是基于贪婪算法的方法.第一种基于深度优先搜索(DFS)的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之一,主要是采用递归的

PHP漏洞全解(三)-客户端脚本植入

本文主要介绍针对PHP网站的客户端脚本植入攻击方式.所谓客户端脚本植入攻击,是指将可以执行的脚本插入到表单.图片.动画或超链接文字等对象内.当用户打开这些对象后,黑客所植入的脚本就会被执行,进而开始攻击. 客户端脚本植入(Script Insertion),是指将可以执行的脚本插入到表单.图片.动画或超链接文字等对象内.当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击. 可以被用作脚本植入的HTML标签一般包括以下几种: 1.<script>标签标记的javascript和vb

诺基亚(Microsoft Devices Group)2014暑期实习生笔试题知识点

总结一下Microsoft Devices Group的软件类笔试题,所有笔试题分两份试卷,逻辑题一份和软件测试题一份,只总结技术题喽~题目全英文,只包含选择题和填空题,选择题居多,分单选和多选,多选题题目会标注出来.总体来说考察的很基础也很细节,难度适中.下面把记得的一些知识点总结一下下: *命名管道的定义. *主机A发送IP数据报给主机B,途中经过了5个路由器.试问在IP数据报的发送过程总共使用几次ARP(6次) *Linux系统下,给一个文件重命名(mv A,B) *考察无符号整型数和有符