web前端高频知识点面试题有哪些

作者:有用网 阅读量:222 发布时间:2023-10-30
关键字 web

今天小编给大家分享一下web前端高频知识点面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

var、let、const

三者的区别

区别 let const var
重复声明 不能重复声明,会报SyntaxError错 const 定义常量,值不能修改的变量叫做常量,一定要赋初始值,因为不能修改。 可以重复声明
块级作用域 拥有 拥有 不拥有
会不会污染全局变量(挂载在window上) 不会 不会

说明
1.let和const也存在变量提升,只是提升的方式不同

  • var变量提升:变量的声明提升到顶部,值为

    undefined
  • let、const变量提升: 变量声明提升到顶部,只不过将该变量标记为

    尚未初始化

    let 和 const存在
    暂时性死区
    ,代码执行过程中的一段时间内,在此期间无法使用标识符,也不能引用外层作用域的变量。

let answer;
function fn(){
	//如果此时没有将变量变量提升到这里,answer应该取外层answer的值
	console.log(answer); //Uncaught ReferenceError: Cannot access 'answer' before initialization
	let answer=42;
}

2.var创建的全局变量->全局对象的属性,let和const在全局作用域声明的变量->不是全局对象的属性

3.如果常量是个数组或对象,对其内部元素修改,不算对常量的修改,不会报错。常量指向了一个地址,地址不变就不会报错。

变量提升和函数提升

  • 变量声明升级
    通过var定义(声明)的变量,在定义语句之前的就可以访问到
    但是值是undefined

  • 函数声明提升
    通过function声明的函数,在之前就可以直接调用。
    值是函数体

//变量提升先于函数提升,提升后被函数声明function覆盖,所以就算换了顺序也是function
function a(){
}
var a ;
console.log(typeof a); //function


var f1 = function () {
    console.log(1);
}
function f1 () {
    console.log(2);
}
f1() ; //1
//变量提升后
var f1;//变量提升
function f1(){};//函数提升
f1 = function () {
    console.log(1);
}
f1() ;

变量提升练习题

作用域和作用域链

理解:一个代码段所在的区域,是静态的,在编写代码时就确定了
作用:变量绑定在这个作用域内有效,隔离变量,不同作用域下同名变量不会有冲突。
作用域分类

  • 全局作用域

  • 函数作用域

  • 块级作用域

作用域链:多个作用域嵌套,就近选择,先在自己作用域找,然后去就近的作用域找。

函数的作用域在声明的时候就已经决定了,与调用位置无关
所以执行aaa()的时候先在aaa的作用域里面找,没有找到a,再去父级作用域window里面找,找到a=10

var a = 10;  
function aaa() {
    alert(a);
}
function bbb() {
    var a = 20;
    aaa();
}
bbb();

执行上下文

对当前JavaScript的执行环境的抽象,每当JavaScript开始执行的时候,它都在执行上下文中运行。

  • 全局执行上下文:在执行全局代码前将window确定为全局执行上下文

对全局数据进行预处理

  • var定义的全局变量 --> undefined,添加为window的属性

  • function声明的全局函数 --> 赋值(函数体),添加为window的方法

  • this --> 赋值window

  • 开始执行全局代码

  • 函数执行上下文:在调用函数,准备执行函数体之前,创建对应的函数执行上下文对象

对局部数据进行预处理

  • 形参变量 --> 赋值(实参)


#发表评论
提交评论