JS基础-原型和原型链/作用域和闭包-面试题

class

定义类,构造实例。是ES6语法规范。

继承

利用super()继承父类中的constructor()

类型判断-instanceof

{} instanceof Object //true

原型

每个class都有显式原型prototype;每个实例都有隐式原型-proto-;实例的-proto-指向对应class的prototype

基于原型的执行规则

想获取某个实例对象的属性或执行方法时,先在实例对象自身的属性和方法中找,如果找不到则自动去-proto-中查找

原型链

手写简易JQuery

创建一个包含属性和方法的类,实例化。即可调用其中的方法和属性。


题目:创建10个<a>标签,点击的时候弹出来对应的序号

let i, a
for(i=0;i<10;i++){
    a=document.createElement('a')
    a.innerHTML=i+'<br>'
    a.addEventListener('click',funtion(e){
    e.preventDefault()
    alert(i)
    })
    document.body.appendChild(a)
}
//当click点击时,由于i是在全局作用域下定义的,此时i已经变成10了
//解决方法如下:
let a
for(let i=0;i<10;i++){
    a=document.createElement('a')
    a.innerHTML=i+'<br>'
    a.addEventListener('click',funtion(e){
    e.preventDefault()
    alert(i)
    })
    document.body.appendChild(a)
}//let放在这里,每次循环就会形成一个新的块级作用域

作用域

全局作用域;函数作用域;块级作用域(ES6新增,目前使用)

自由变量

一个变量在当前作用域没有定义,但被使用了,则向上级作用域,一层一层依次寻找,直至找到位置 ,如果全局作用域都没找到,则报错xx is not defined

闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是一个作用域可以访问另外一个函数内部的局部变量。主要作用:延伸了变量的作用范围。

作用域应用的特殊情况有两种表现:函数作为参数被传递;函数作为返回值被返回。

闭包中自由变量的查找,是在函数定义的地方向上级(方)作用域查找,而不是在执行的地方。

//函数作为参数被传递
function print(fn) {
    const a = 200
    fn()
}
const a = 100
function fn() {
    console.log(a)
}
print(fn)  //结果为100

this

应用场景:作为普通函数调用;使用call、apply、bind去调用;作为对象方法被调用;在class方法中调用;箭头函数。

this取什么值是在函数执行的时候确认的,而不是在函数定义的时候确认的,适用于以上五种场景

定时器中this指向window,箭头函数的this指向的是它上一级的this,类里面的this指向的是constructor

手写bind函数

//模拟bind
Function.prototype.bind1 = function () {
    //将参数拆解为数组,调用如下方法可将一个列表转成一个数组,slice是Array原型上的一个api,
    //call则通过slice函数执行的时候把arguments的值赋给Array.prototype.slice的this
    const args = Array.prototype.slice.call(arguments)

    //获取this(数组第一项),.shift把数组第一个元素取出来,改变原数组
    const t = args.shift

    //fn1.bind(...)中的fn1
    const self = this

    //返回一个函数
    return function() {
        return self.apply(t,args)
    }
}

bind()方法创建一个新的函数,当这个新的函数被调用时,其this值置为提供的值,其参数列表前几项置为创建时指定的参数序列

实际开发中闭包的应用

闭包隐藏数据,只提供API。闭包中的数据被隐藏,不被外界访问,只能通过api:set/get设置和读取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值