前端面试准备-3
1.let、const、var的区别
①:let和const为块级作用域,var为全局作用域
②:let和var可以重新赋值定义,而const不可以
③:var会提升到作用域顶部,但不会初始化;let和const也会提升到作用不顶部,但在初始化前不可访问(暂时性死区)。
2.let声明的全局变量,可以被window对象访问吗
不可以。与之相对应的var声明的全局变量和最外层作用域中定义的函数可以被window访问。
3.JavaScript中的Object.keys
该方法返回一个数组,该数组的元素是一个对象自身自身可枚举属性的字符串键。
通常认为Object.keys返回的是有序的
①:数字优先(数字属性,包括可以转为数字的字符串属性,优先返回,按照数值的大小升序排序)
②:字符串其次(非数字的字符串属性按照他们被添加到对象的顺序返回)
③:不返回Symbol类型
4.HTML的语义化
根据内容的含义和结构(内容语义化),选择合适的HTML标签(代码语义化)
5.DOCTYPE的作用
是一种标记语言的文档类型声明。<!DOCTYPE html>不是一个html标签,而是一个指令,告诉浏览器使用哪个html版本进行编写。
标准模式
怪异模式(如果文档中缺少DOCTYPE或错误使用,浏览器可能就会使用这种模式)
6.meta标签
<meta>由name和content属性定义,用来描述网页文档属性。
//声明文档使用字符编码
<meta charset="UTF-8">//保障页面正确缩放和渲染
<meta name="viewport" content="width=device-width, initial-scale=1.0">//页面描述
<meta name="description" content="这是一个页面描述。"><meta name="keywords" content="关键词1, 关键词2">//指明作者
<meta name="author" content="作者名">//一定时间后重新刷新或重定向到另一个URL
<meta http-equiv="refresh" content="30">//防索引、防跟踪
7.如何确认this值
在非严格模式下,总是指定一个对象,但在严格模式下可以是任意值
'use strict'开启严格模式
①:全局执行环境中,指向全局对象(非严格、严格模式都一样)
②:函数内部,取决于被调用的方式
- 直接调用的this值:非严格模式下为全局对象(window);在严格模式下为undefined
- 对象方法调用的this值:都为调用者对象
8.如何指定this的值
①:调用时指定:
- call方法,挨个传入参数
-
function func(num1,num2){console,log(this) //打印指向person对象console.log(num1,num2) //1 2 }const person = {name:'山里' }func.call(person,1,2)
- apply方法,以数组方式传入参数
-
function func(num1,num2){console,log(this) //打印指向person对象console.log(num1,num2) //3 4 }const person = {name:'山里' }func.apply(person,[3,4])
②:创建时指定
- bind方法
-
function func(num1,num2){console,log(this) //打印指向person对象console.log(num1,num2) //666 888 }const person = {name:'山里' }const bindFunc = func.bind(person,666)bindFunc(888)
- 箭头函数
-
const food ={name:'bb'eat(){console.log(this) //food这个对象setTimeout(function(){console.log(this) //全局对象window},1000) }food.eat()