JS关于作用域、闭包的面试题

作者: loushumei | 来源:发表于2020-05-06 23:31 被阅读0次

1.创建10个a标签,点击时弹对应的序号

常见做法 ❌

var a
for (var i = 0; i < 10; i++) {
    a=document.createElement('a')
    a.innerHTML=i
    a.addEventListener('click',function(e){
        e.preventDefault()//取消默认事件
        alert(i)
    })
    document.body.appendChild(a)
}

结果:点击每个元素均弹出 10
分析:点击事件点击的时候for循环执行完毕,并且i作用域是全局作用域,i的值已经变为10,故点击10个元素均为10

正确做法✔️

let  a
for (let i = 0; i < 10; i++) {
    a = document.createElement('a')
    a.innerHTML = i
    a.addEventListener('click', function (e) {
        e.preventDefault() //取消默认事件
        alert(i)
    })
    document.body.appendChild(a)
}

结果:点击每个元素弹对应的序号
分析:let i定义在for循环块级作用域内,每次for循环执行的时候都会形成一个新的块,每个块及作用域下都生成一个i,所以每个元素弹对应的序号

2.用闭包做一个简单的catch工具

闭包中的数据,被隐藏,不被外界访问

function creatCache(){
    const data={}//闭包中的数据,被隐藏,不被外界访问
    return {
        set:function(key,val){
            data[key] = val
        },
        get:function(key){
            return data[key]
        }
    }
}
const c = creatCache()
c.set('name','lolo')
console.log(c.get('name')) //lolo

相关文章

  • 2018-01-07 关于javascript闭包和作用域的理解

    关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域...

  • js闭包问题

    javascript 闭包的概念,闭包的作用,闭包经典面试题详解(配图解) 函数作用域(闭包前置知识) 要彻底弄懂...

  • JS闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • js闭包的理解

    什么是闭包 通俗的来讲,个人觉得闭包就是延长变量作用域的函数。众所周知js的作用域分为全局作用域和链式作用域。在函...

  • Javascript 闭包

    如果要了解闭包,我们需要先了解闭包的由来,闭包的产生,源于JS的词法作用域 词法作用域 作用域是指一个 变量能够访...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • js闭包详解

    1.什么是闭包? 要了解什么是闭包,首先你要了解作用域。 js的作用域分两种,全局作用域和局部作用域。 我们知道在...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 现阶段对于前端成长的困惑

    js权威指南,关于作用域链,全局作用域,函数作用域,基本已经全部了解了。闭包,原型继承,借用函数也很了解了,一些设...

网友评论

    本文标题:JS关于作用域、闭包的面试题

    本文链接:https://www.haomeiwen.com/subject/sojnghtx.html