当前位置: 首页 > news >正文

10月面试js基础

作用域

变量的可用范围

作用域链

保存的变量的使用顺序的一个链(也就是路线图), 被称为作用域链。
当在Javascript中使用一个变量的时候,首先Javascript引擎会尝试在当前作用域下去寻找该变量,如果没找到,再到它的上层作用域寻找,以此类推直到找到该变量或是已经到了全局作用域。

如果在全局作用域里仍然找不到该变量,它就会在全局范围内隐式声明该变量(非严格模式下)或是直接报错。

词法环境

是一种标识符—变量映射的结构(这里的标识符指的是变量/函数的名字,变量是对实际对象[包含函数和数组类型的对象]或基础数据类型的引用)。

简单地说,词法环境是Javascript引擎用来存储变量和对象引用的地方。

闭包

能够读取其他函数内部变量的函数 。js里为了实现数据和方法私有化的方式。

1-实现模块化和私有变量

2-缓存数据

3-实现回调函数

面试原理之闭包的优缺点和应用场景 - 掘金 (juejin.cn)

闭包的缺点:

  1. 内存泄漏:由于闭包中的函数引用了外部函数的变量,而外部函数的作用域在函数执行结束后并不会被销毁,这就导致了闭包函数中的变量也无法被销毁,从而占用了内存空间。如果闭包被滥用,可能会导致内存泄漏的问题。
  2. 性能问题:闭包中的函数访问外部函数的变量需要通过作用域链来查找,而作用域链的长度决定了查找的速度。如果闭包层数较深,作用域链就会很长,从而影响了函数的执行效率。

为了解决闭包的这些问题,可以采取以下一些措施:

  1. 及时释放闭包:如果不再需要使用闭包,可以手动将其赋值为 null,从而释放闭包中占用的内存空间。
  2. 减少闭包层数:尽量减少闭包层数,避免作用域链过长,从而提高函数的执行效率。
  3. 使用立即执行函数:可以使用立即执行函数来避免闭包的内存泄漏问题。由于立即执行函数在执行结束后会被立即销毁,因此其中的变量也会被释放。
  4. 使用模块化编程:可以使用模块化编程来避免闭包的性能问题。在模块化编程中,每个模块都是一个独立的作用域,不会对全局作用域造成影响,从而避免了作用域链过长的问题。

// 构造函数
function Person(name, age) {this.name = name;this.age = age;
}// 生成实例
const p = new Person('zhangsan', 18);

new()方法做了什么

  1. 创建一个新对象

  2. 将新对象的__proto__指向构造函数的protptype对象

  3. 将构造函数的作用域赋值给新对象(也就是this指向新对象)

  4. 执行构造函数中的代码(为这个新对象添加属性)

  5. 返回新的对象

一文搞懂JS原型与原型链(超详细,建议收藏) - 掘金 (juejin.cn)

构造函数创建一个实例的过程

  1. 创建一个新对象
  2. 将构造函数的作用域赋值给新对象(这样this就指向了新对象)
  3. 执行构造函数中的代码(为新对象添加实例属性和实例方法)
  4. 返回新对象

 原型

  • 每个函数都有prototype属性,被称作原型。
  • prototype原型指向一个对象,故也称作原型对象。

原型对象 

JS的每个函数在创建的时候,都会生成一个属性prototype,这个属性指向一个对象,这个对象就是此函数的原型对象。该原型对象中有个属性为constructor,指向该函数。这样原型对象它的函数之间就产生了联系。 

__proto__prototype不太一样,一个是对象拥有的隐式原型,一个是函数拥有的显式原型,这里我们简单总结一下__proto__

  • 通常被称作隐式原型,每个对象都拥有该属性。
  • [[prototype]]其实就是__proto__

原型链

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会通过它的__proto__隐式属性,找到它的构造函数原型对象,如果还没有找到就会再在其构造函数prototype__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链

结论:每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性

JavaScript原型与原型链最全面的详解 - 掘金 (juejin.cn)

相关文章:

10月面试js基础

作用域 变量的可用范围 作用域链 保存的变量的使用顺序的一个链(也就是路线图), 被称为作用域链。 当在Javascript中使用一个变量的时候,首先Javascript引擎会尝试在当前作用域下去寻找该变量,如果没找到,再…...

研发日常踩坑-Mysql分页数据重复 | 京东云技术团队

踩坑描述: 写分页查询接口,order by和limit混用的时候,出现了排序的混乱情况 在进行第N页查询时,出现与第一前面页码的数据一样的记录。 问题 在MySQL中分页查询,我们经常会用limit,如:limit(0,20)表示查询第一页的…...

Ubuntu18.04安装QGC报错 `GLIBC_2.29‘ not found

按照官网教程,最后运行时出错。 /tmp/.mount_QGroun2NOhPP/QGroundControl: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.29 not found (required by /tmp/.mount_QGroun2NOhPP/QGroundControl) /tmp/.mount_QGroun2NOhPP/QGroundControl: /usr/lib/x86_64-…...

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元回归预测。基于贝…...

Easyx趣味编程7,鼠标消息读取及音频播放

hello大家好,这里是dark flame master,今天给大家带来Easyx图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧&…...

towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本

towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本 Towxml概述安装下载 Towxml在小程序中使用 towxml Towxml概述 towxml3.0 支持以下功能: ● echarts图表,默认禁用,需自行构建以开启此功能 ● LaTeX数学公式&#…...

项目管理实战总结(一)-沟通路径问题

前言 那是2021年春节之后,我决定主动申请参与到这个项目,是知道工作强度大、难度大的情况的。有很多的同事是想躲,而我是明知山有虎偏向虎山行。我确定,通过这个项目,一定有我需要的东西。现在项目已经完成了终验专家…...

UE5场景逐渐变亮问题

1、显示 -- 关闭眼部适应 2、项目设置 -- 关闭自动曝光 参考: 虚幻5/UE5 场景亮度逐渐变亮完美解决方法 - 哔哩哔哩...

VM16Pro的Win10虚拟机安装Linux子系统Kali

VM16Pro的Win10虚拟机安装Linux子系统Kali 一、启用Windows功能二、配置WSL三、安装Kali四、安装kali基本工具包五、图形化六、适用的报错七、其他问题参考 一、启用Windows功能 启用后需重启二、配置WSL wsl --update #管理员启动Powershell执行,完成后将下面…...

C++中类的声明

C中类的声明 假设您要编写一个模拟人(如您自己)的程序。人有其特征:姓名、出生日期、出生地和性别(这些信息让每个人都是独一无二的),还能做某些事情,如交谈、自我介绍等。 要在程序中模拟人&…...

IDEA常用AI插件

只推荐免费的 一、对话式AI 1. ChatGPT GPT-4 - Bito AI Code Assistant ChatGPT GPT-4 - Bito AI Code Assistant 插件地址:https://plugins.jetbrains.com/plugin/18289-chatgpt-gpt-4–bito-ai-code-assistant支持自定义prompt支持解释代码支持生成代码注释支持…...

【LeetCode】每日一题最后一个单词的长度投票法求解多数元素异或操作符巧解只出现一次的数字整数反转

个人主页直达:小白不是程序媛 LeetCode系列专栏:LeetCode刷题掉发记 目录 LeetCode 58.最后一个单词的长度 LeetCode169.多数元素 LeetCode 136.出现一次的数字 LeetCode 7.整数反转 LeetCode 58.最后一个单词的长度 难度:简单 OJ链接…...

自然语言处理---注意力机制

注意力概念 观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的),是因为大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果。正是基于这样的理论&#xf…...

目标检测YOLO实战应用案例100讲-基于改进YOLO v7的智能振动分拣系统开发(续)

目录 3.2 引入EIOU损失函数 3.2.1 CIOU损失函数 3.3.2 基于Focal-EIOU损失函数的网络优化 ​编辑...

Ubuntu - 用户和权限

sudo sudo(Super User Do)是在Linux和Unix系统中用于执行具有超级用户(root)权限的命令的命令。它允许普通用户以特权身份运行特定命令,通常需要输入密码以确认其身份。 sudo 是一种安全的方式,用于限制哪…...

JAVA实现Jfilechooser搜索功能

JAVA实现Jfilechooser搜索功能 背景介绍需求描述思路和方法Java代码实现和注释相关知识点介绍视频演示结语 背景介绍 Java是一种面向对象的编程语言,广泛应用于各种应用程序开发中。文件搜索是我们在日常工作或者学习中经常会遇到的需求,比如查找某个文…...

​iOS上架App Store的全攻略

第一步:申请开发者账号 在开始将应用上架到App Store之前,你需要申请一个开发者账号。 1.1 打开苹果开发者中心网站:Apple Developer 1.2 使用Apple ID和密码登录(如果没有账号则需要注册),要确保使用与公…...

线性代数3:矢量方程

一、前言 欢迎回到系列文章的第三篇文章,内容是线性代数的基础知识,线性代数是机器学习背后的基础数学。在我之前的文章中,我介绍了梯队矩阵形式。本文将介绍向量、跨度和线性组合,并将这些新想法与我们已经学到的内容联系起来。本…...

线性代数的本质笔记

课程来自b站发现的《线性代数的本质》,可以帮助从直觉层面理解线性代数的一些基础概念,以及把一些看似不同的数学概念解释之后,发现其实有内在的关联。 这里只对部分内容做一个记录,完整内容请自行观看视频~ 01-向量究竟是什么 …...

[SQL | MyBatis] MyBatis 简介

目录 一、MyBatis 简介 1、MyBatis 简介 2、工作流程 二、入门案例 1、准备工作 2、示例 三、Mapper 代理开发 1、问题简介 2、工作流程 3、注意事项 4、测试 四、核心配置文件 mybatis-config.xml 1、environment 2、typeAilases 五、基于 xml 的查询操作 1、…...

告别Option键!在MacBook Pro 2015上,用rEFInd打造macOS与Ubuntu 20.04的无缝双系统切换

优雅双系统:用rEFInd为MacBook Pro 2015打造无缝切换体验 每次开机都要按住Option键选择系统?默认的启动菜单简陋又难用?作为同时需要macOS生产力与Ubuntu开发环境的用户,我花了三个月时间折腾出这套完美方案。本文将分享如何通过…...

Harepacker-resurrected终极指南:深度解析MapleStory游戏资源编辑全流程

Harepacker-resurrected终极指南:深度解析MapleStory游戏资源编辑全流程 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected Harepac…...

嵌入式系统HLS技术:原理、优化与应用实践

1. 嵌入式系统高级综合技术概述高级综合(High-Level Synthesis, HLS)技术正在彻底改变传统硬件设计流程。作为连接软件算法与硬件实现的关键桥梁,HLS允许开发者使用C/C等高级语言描述功能,然后自动转换为可综合的RTL代码&#xff…...

微软商店装不上Killer控制中心?别急,试试这个绕过商店的完整安装流程(含驱动卸载与兼容模式)

微软商店安装Killer控制中心失败的终极解决方案 每次打开微软商店准备下载Killer控制中心(KCC)时,那个不断转圈的进度条和最终弹出的"安装失败"提示,是不是让你感到无比沮丧?作为一款能够智能优化网络性能的利器,KCC的缺…...

Mac学Linux新姿势:VMware Fusion装Ubuntu后,用VS Code远程开发真香了

Mac与Linux的优雅共舞:VMware FusionUbuntuVS Code远程开发全指南 当Mac的精致美学遇上Linux的强大内核,会碰撞出怎样的火花?对于开发者而言,这绝非简单的系统切换选择题,而是如何让两大操作系统优势互补的深度整合。本…...

Mac/Linux上NPM全局安装又报EACCES?别急着用sudo,试试这个更安全的权限修复方法

Mac/Linux上NPM全局安装报EACCES?这才是符合Unix哲学的权限修复方案 每次在终端输入npm install -g准备安装一个全局工具时,那个刺眼的EACCES: permission denied错误就像一堵墙,把我们的开发效率挡在外面。很多开发者会条件反射地加上sudo暴…...

混合系统设计:连续与离散的动态融合

1. 混合系统概述:时间与离散的桥梁混合系统(Hybrid Systems)是嵌入式系统设计中的关键建模框架,它巧妙地将两种看似对立的建模范式融为一体:基于时间的连续动态系统与基于离散事件的状态机模型。这种融合不是简单的叠加…...

保姆级教程:手把手教你用第三种方法修复ClickHouse只读表(附详细命令)

ClickHouse表只读状态精准修复实战指南 遇到ClickHouse表突然变成只读状态,就像开车时突然发现方向盘锁死一样让人措手不及。这种状况通常发生在ZooKeeper压力过大或元数据丢失时,但别担心,本文将带你深入理解问题本质,并掌握一种…...

当经典运筹学遇上深度强化学习:我们离‘一键最优’的智能工厂还有多远?

深度强化学习重构制造业调度:从理论到落地的关键突破 走进任何一家现代化制造工厂,你都会看到数百台设备在同步运转,成千上万的零件在不同工序间流转。这种复杂场景下的生产调度,堪称工业界的"终极算法挑战"。传统运筹学…...

告别Samba和FTP:用Java NFS-Client 1.0.3实现跨平台文件操作,SpringBoot项目实战

告别Samba和FTP:用Java NFS-Client 1.0.3实现跨平台文件操作,SpringBoot项目实战 在分布式系统和云原生架构日益普及的今天,传统的文件共享方案如Samba和FTP逐渐暴露出性能瓶颈和兼容性问题。本文将带你探索一种更现代、更高效的替代方案——…...