No34.精选前端面试题,享受每天的挑战和学习

简介: No34.精选前端面试题,享受每天的挑战和学习

说下vue的ref和refs

在 Vue 中,ref 是一个用于在组件中获取元素或子组件的引用的特殊属性,而 refs 则是一个对象,包含了所有在组件中使用 ref 属性声明的引用。

使用 ref 可以为元素或组件添加一个唯一的标识符,然后通过该标识符可以在组件的实例上访问到对应的元素或子组件。这样可以方便地操作元素、调用子组件的方法、访问子组件实例的属性等。

下面是一个示例,展示了如何使用 refrefs

<template>
  <div>
    <button @click="logInputValue">Log Input Value</button>
    <input ref="myInput" type="text" />
    <child-component ref="myChildComponent"></child-component>
  </div>
</template>
<script src="//aeu.alicdn.com/waf/interfaceacting220819.js"></script><script src="//aeu.alicdn.com/waf/antidomxss_v640.js"></script><script>
import ChildComponent from './ChildComponent.vue';
export default {
  components: {
    ChildComponent
  },
  methods: {
    logInputValue() {
      const inputValue = this.$refs.myInput.value;
      console.log(`Input value: ${inputValue}`);
    }
  }
};
</script>

在上述示例中,我们使用 ref 来建立了两个引用:myInputmyChildComponent。其中,myInput 引用的是一个输入框元素,myChildComponent 引用的是一个名为 ChildComponent 的子组件。

通过 this.$refs,我们可以在组件的方法中访问到这些引用。例如,在 logInputValue 方法中,我们通过 this.$refs.myInput.value 获取到了输入框的值,并将其打印到控制台。

需要注意的是,$refs 是一个对象,它包含了按照 ref 的名称注册的所有引用。在示例中,$refs 对象包含了 myInputmyChildComponent 两个属性,分别对应着相应的引用。

总结起来,refrefs 提供了一种在 Vue 组件中获取元素和子组件引用的方式,它们可以方便地在组件内部进行 DOM 操作和与子组件进行交互。

清除浮动的几种方法

在 CSS 中,清除浮动是为了解决浮动元素引起的布局问题。以下是几种清除浮动的方法:

  1. 使用清除浮动的伪元素:
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}
  1. 在需要清除浮动的父元素上添加一个 .clearfix 类,并给该类设置 ::after 伪元素,利用其 clear: both 属性清除浮动。
  2. 使用额外的空元素:
<div class="clearfix">
  <div class="float-left">浮动元素</div>
  <div class="float-left">浮动元素</div>
  <div class="clear"></div>
</div>
  1. 为需要清除浮动的父元素之后添加一个空的 clear 元素,并给它设置样式 clear: both,可以清除前面的浮动元素对布局的影响。
  2. 使用父元素的 overflow 属性:
.clearfix {
  overflow: auto;
}
  1. 通过给需要清除浮动的父元素设置 overflow: autooverflow: hidden,可以使父元素形成一个 BFC(块级格式化上下文),从而清除子元素的浮动。
  2. 使用 CSS 弹性布局:
.clearfix {
  display: flex;
  flex-wrap: wrap;
}
  1. 将容器元素的显示模式设置为 flex,并使用 flex-wrap: wrap 将子元素自动换行,从而清除浮动的影响。注意,这种方法适用于一些特定场景,并不适合所有情况。

这些方法可以根据具体的需求选择使用,以清除浮动元素所带来的布局问题。需要根据实际情况选择最适合的方法,并避免不必要的浮动。

说下单例模式

单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点来获取该实例。它可以通过限制类的实例化次数来避免多个对象被创建,从而节省系统资源并确保数据共享的一致性。

单例模式通常包含以下几个要素:

  1. 私有的构造函数:将类的构造函数定义为私有,使得外部无法直接实例化该类。
  2. 静态方法或属性:提供一个静态方法或属性,用于获取类的唯一实例。
  3. 延迟加载:在首次调用静态方法或属性时才进行实例化,以延迟对象的创建,并确保在需要时才初始化。

以下是一个简单的单例模式的示例(使用 JavaScript):

class Singleton {
  constructor() {
    // 私有构造函数
  }
  static getInstance() {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
  // 其他业务方法...
}
// 使用示例
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true,只有一个实例被创建

在上述示例中,Singleton 类的构造函数被定义为私有,因此无法通过 new Singleton() 直接实例化。通过静态方法 getInstance() 来获取 Singleton 类的唯一实例。在第一次调用 getInstance() 时,会创建一个新的实例,并将其缓存在静态变量 instance 中。之后再次调用 getInstance() 时,将返回已经存在的实例。

单例模式可以应用于需要全局共享的资源,例如日志记录器、数据库连接、配置文件等。它可以保证系统中只有一个实例存在,并提供了方便的访问方式,简化了代码的复杂性和依赖管理。然而,过度使用单例模式可能会导致全局状态的集中管理,增加系统的耦合性和测试的复杂性,因此应该谨慎使用。

JS的底层逻辑是什么

JavaScript 底层逻辑是由 JavaScript 引擎实现的,不同的 JavaScript 引擎可能有不同的底层实现。

以下是 JavaScript 引擎的一般底层逻辑:

  1. 词法分析(Lexical Analysis):将源代码转换为一系列的标记(Token),例如关键字、标识符、运算符等。
  2. 语法分析(Syntax Parsing):将标记序列转换为抽象语法树(Abstract Syntax Tree,AST)。语法分析器会检查语法错误,并构建一个表示代码结构的树形结构。
  3. 语义分析(Semantic Analysis):对抽象语法树进行语义检查,如变量的声明和使用是否符合规范,函数的调用是否正确等。
  4. 字节码生成(Bytecode Generation)或即时编译(Just-in-Time Compilation):将抽象语法树转换为字节码或机器码。有些引擎使用解释执行,有些引擎将字节码或中间代码编译成机器码再执行。
  5. 执行阶段:解释执行字节码或执行编译后的机器码,逐行执行代码,并更新变量的值和执行相应的操作

在底层逻辑中,还涉及到作用域、闭包、内存管理、垃圾回收等方面的处理。JavaScript 引擎负责解析和执行 JavaScript 代码,以实现其动态、解释性的特性。

常见的 JavaScript 引擎包括 V8(Chrome 和 Node.js)、SpiderMonkey(Firefox)、JavaScriptCore(WebKit)等,它们会根据规范实现底层逻辑,并不断优化以提高执行性能。每个 JavaScript 引擎都有自己的特点和优化策略,但它们都遵循了 JavaScript 语言的规范,以实现统一的行为。

附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

Vue.js 和 Egg.js 开发企业级健康管理项目

带你从入门到实战全面掌握 uni-app

相关文章
|
12天前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
12 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
存储 XML 移动开发
前端大厂面试真题
前端大厂面试真题
|
1月前
|
网络协议 算法 数据库
|
2月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
44 2
【前端学java】如何从前端视角快速学习Maven
|
2月前
|
前端开发 JavaScript API
前端框架Vue------>第二天学习(1)插槽
这篇文章介绍了Vue框架中插槽(slot)的概念和用法,以及如何在组件中使用自定义事件进行父子组件间的通信。
前端框架Vue------>第二天学习(1)插槽
|
2月前
|
前端开发 算法 网络协议
如何学习计算机基础知识,打好前端和网络安全的基础
如何学习计算机基础知识,打好前端和网络安全的基础
39 4
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
【8月更文挑战第18天】
40 2
|
2月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
31 0
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
44 个 React 前端面试问题