"这是一份关于前端高级面试题目的2023年更新版文档,包含了rem与em的区别、Git常用命令、SQL语句的分类、如何创建无原型对象以及JavaScript作用域等核心知识点。"
### 1、rem与em的区别
在前端开发中,rem(root em)和em都是用于设置元素尺寸的单位,但它们的参照对象不同。rem是相对于根元素(通常是html元素)的font-size来计算的,而em则是相对于父元素的font-size来计算。例如,如果html元素的font-size设置为12px,一个div的font-size设置为2rem,那么这个div的字体大小将是24px。相反,如果在一个font-size为12px的p元素内,有一个font-size设置为2em的span,span的字体大小将被设置为24px。
### 2、Git常用命令
Git是版本控制系统,这些命令是日常开发中常用的:
- `git clone`:从远程仓库克隆项目到本地。
- `git add`:添加文件到暂存区,`.`表示添加所有改动。
- `git commit -m` 或 `git commit -a`:提交更改,-m后跟提交信息,-a表示自动添加所有修改过的文件。
- `git status -s`:简洁地显示工作区的状态。
- `git fetch`/`git merge` 或 `git pull`:拉取并合并远程分支的最新更改。
- `git reflog`:查看提交历史记录。
### 3、SQL语句的分类
SQL语言分为四大类:
- DDL(Data Definition Language):数据定义语言,包括`CREATE`、`DROP`、`ALTER`等,用于数据库结构的创建、删除和修改。
- DCL(Data Control Language):数据控制语言,如`GRANT`,用于权限管理和访问控制。
- DML(Data Manipulation Language):数据操纵语言,包括`INSERT`、`UPDATE`、`DELETE`,用于插入、更新和删除数据。
- DQL(Data Query Language):数据查询语言,以`SELECT`为主,用于检索和查询数据。
### 4、如何创建一个没有prototype(原型)的对象?
在JavaScript中,通常每个对象都有一个原型链,但通过`Object.create(null)`可以创建一个没有原型的对象。这样做的对象不会有内置的方法,例如在上述示例中,尝试调用`o2.toString()`会抛出错误,因为`o2`没有继承任何原型的方法。
### 5、什么是作用域?
JavaScript的作用域规定了变量和函数的可见性和生命周期。主要有以下三种:
- 全局作用域:在函数外部定义的变量和函数,可以在整个脚本中访问。
- 函数作用域:在函数内部定义的变量和函数仅在该函数内部可见。
- 块作用域(ES6):由`let`和`const`关键字定义的变量在它们所在的代码块内有效,而不是整个函数,这是ES6引入的新特性。
理解并掌握这些知识点对于前端开发者来说至关重要,尤其是在面试中,它们经常作为考察开发者基础和实践经验的标准问题出现。