js常见问题1

2023-12-13 04:17:47

目录

1、原型与原型链

2、this指向

3、call ,apply,bind 的函数区别?

4、闭包


1、原型与原型链

原型:JS为每个构造函数提供一个属性prototype(原型),它的值是一个对象,prototype也叫原型对象 原型为了共享公共的成员 prototype

原型链:实例对象在查找属性时,如果查找不到,就会沿着proto去与对象关联的原型上查找,如果还查找不到,就去找原型的原型,直至查到最顶层,这也就是原型链的概念。

对象访问成员的机制
1首先查找自身有没有,有就就近原则使用
2自身没有该成员,通过_proto_找到原型对象,看原型对象上有没有,有就执行
3假如原型对象上也没有,再找原型对象的_proto__,一直找到0bject.prototype
4一直找到Object. prototype,找不到就undefined

2、this指向

1、script ?全局环境下 ? ? ?this指向window

2、函数直接调用 ? ?this代表window ,函数内部开启严格模式, this ? 指向 ?undefined
' use strict' ? ?开启严格模式

3、事件的回调函数中 ? ?this------>事件源

4、构造函数的this ?-------->创建出来的对象(new出来的实例化对象)

5、定时器 ? ?this------->window

6、立即执行函数(IIFE) ?this------>window

7、谁调用函数,this就是谁

3、call ,apply,bind 的函数区别?

相同点: call ,apply,bind都可以改变this指向,让函数执行

接收的第一个参数都是this要指向的对象

都可以利用后续的参数传参

不同点: call和apply对函数都是立即调用的,而bind不会立即调用函数,bind返回的是改变this指向之后的函数 call的参数是用逗号隔开的,apply是接收数组作为参数

4、闭包

概念:闭包 ? ?内部函数及其对外部变量的引用捆绑在一起
内部函数访问外部函数的变量

形成条件:闭包 ? ? 内部函数+外部函数 ?(提供一个变量)

作用:闭包 ? ?延伸变量的作用域,形成独立的作用域

原理:作用域链

缺点:容易造成内存泄漏(内存因某种原因无法释放)

文章来源:https://blog.csdn.net/m0_56713342/article/details/134918417
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。