【九月打卡】第11天 前端工程师2022版 就业必备基础技术面试分析
课程名称:JS基础-作用域和闭包
课程章节:Javascript面试课
课程讲师: 双越
课程内容:
学习课程之前,我们先来看一下这节会遇到哪些面试题?
1、this的不同应用场景,如何取值?
2、实际开发中闭包的应用场景
3、创建10个 a 标签,点击时弹出对应序号。
4、手写bind函数
接下来我们一起看看知识点有哪些?
1.作用域和自由变量
◆全局作用域
◆函数作用域
◆块级作用域(ES6新增)
if while 等用{}包裹起来的都是块级作用域,在{}外使用就会报错
自由变量
◆一个变量在当前作用域没有定义,但被使用了
◆向上级作用域,一层一层依次寻找,直至找到为止
◆如果到全局作用域都没找到,则报错x is not defined
2.闭包
◆作用域应用的特殊情况,有两种表现:
◆函数作为参数被传递
◆函数作为返回值被返回
// 所有的自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方 //100
3.this
◆作为普通函数
◆使用call apply bind
◆作为对象方法被调用
◆在class方法中调用
◆箭头函数
注:this取值在函数执行时确定,不是定义时确认
最后,我们来回顾一下面试题
1.this的不同应用场景,如何取值?
①当作普通函数被调用,直接返回 window
②使用 call apply bind ,传入什么绑定什么
③作为对象方法调用,返回对象本身
④在 class 的方法中调用,当前实例的本身
⑤箭头函数,找上级作用域的this的值
2.手写bind函数
略
3.实际开发中闭包的应用场景,举例说明
隐藏数据,如做一个cache工具:
// 闭包隐藏数据,只提供API function createCache() { const data = {} //闭包中的数据,被隐藏,不被外界访问 return { set: function (key, value) { data[key] = value }, get: function (key) { return data[key] } } } const c = createCache() c.set('a', 100) console.log(c.get('a'));
4.场景题:创建10个标签,点击时弹出对应的序号
let a for(let i = 0;i<10;i++){ a=document.createElement('a') a.innerHTML = i + '<br>' a.addEventListener('click',function(e){ e.preventDefault() alert(i) }) document.body.appendChild(a) }
手写 bind 函数没怎么看,有时间再啃
共同学习,写下你的评论
评论加载中...
作者其他优质文章