首页 > 其他分享 >前端—面试题1

前端—面试题1

时间:2024-07-17 13:27:57浏览次数:14  
标签:面试题 console log 作用域 前端 let var const

前端—今日面试题

var、let和const的区别

简介:能用const的情况下尽量使用const,大多数情况使用let,避免使用var

技巧:const一般声明引用数据类型,let一般声明基本数据类型

区别:

varletconst
变量提升
块级作用域
同一个作用域下重复声明
修改变量的值

var的特点

1.存在变量提升;

// 编辑器中
console.log(a);
// 打印undefined
var a = 1;

// 变量提升的效果
// 编译过程会将var a;提升到最前面
var a;
console.log(a);
a = 1;

注意:赋值不会提升,所以打印undefined,而不是打印1

2.可以多次声明,最后一次声明有效

var a = 1;
var a = 2;
console.log(a);
// 打印 2,后一次声明会覆盖上一次声明

3.关于函数中的var

3.1 函数中使用var,则为局部变量

 var a = 1;
 function change(){
     var a = 2;
 }
 change();
 console.log(a);  
 // 打印 1
 简单说;函数内部属于局部作用域,在局部作用域内寻找a变量,如果寻找不到,去函数外全局作用域寻找a变量(就近原则)
 //使用自执行函数
 var a = 1;
 (function() {
     var a = 2;
  // 此处存在作用域和作用域链的知识点
     console.log(a); 
     // 输出: 2
 })();
 
 console.log(a); //输出:1

3.2函数内不使用变量声明关键字(var),该变量是全局的

 var a = 1;
 (function() {
     a = 2;
     console.log(a); 
     // 输出: 2
 })();
 
 console.log(a); //输出:2

4.基本不会使用,尽量避免使用,存在污染变量和内存泄露等问题

使用 let 可以避免 var 在 for 循环中带来的弊端,因为它提供了块级作用域,使得循环变量只在循环内部有效。

// 使用 var
for (var i = 0; i < 5; i++) {
    console.log(i); 
    // 0, 1, 2, 3, 4
}
console.log(i); 
// 5,i 仍然可以访问,因为它是函数作用域

// 使用 let
for (let j = 0; j < 5; j++) {
    console.log(j); // 0, 1, 2, 3, 4
}
// console.log(j); 
// ReferenceError: j is not defined,j 只在 for 循环的块级作用域内有效

var具有函数作用域,在同步异步中关于for循环的问题
如下例子,var声明的i时函数作用域的,回调函数共享同一个i,异步执行时,i已经变成5,因此都会输出5

for(var i = 0; i < 5 ; i++){
setTimeout(function(){
console.log(i)
) }
}

使用let具有块级作用域来解决,在每一次定时器回调函数的时候都在函数块里声明了一个i,相当于声明了5次,所以打印0-4

for(let i = 0; i < 5 ; i++){
setTimeout(function(){
console.log(i)
)}
}

let的特点

1.不存在变量提升,在声明之前,不可以使用(暂时性死区)

console.log(a)  
// 报错,变量a没有定义
let a = 1;

2.块级作用域

{
    let a = 1;
}
console.log(a); 
// 报错,变量a没有定义

3.在相同的作用域中不可以重复声明

let a = 1;
let a = 2;
// 报错,变量a已经被定义

// 在不同的作用域中不会报错
let a = 1;
{
	let a = 2;
}
// 不会报错

const的特点

1.声明只读变量,声明之后,变量的值不可改变,相当于常量

const a = 1;
a = 2;// 报错,a是一个常量

2 const声明必须初始化

3.const声明对象,变量指向的内存地址所保存的数据不可以改动

const obj = {
	age: 17
}
obj.age = 18;  
// obj内存地址没有改变,而是地址下obj的一个属性的值发生改变,是ok的


// obj被赋予一个新的对象,内存地址发生变化,报错
obj = {
	age: 18
}

4.块级作用域等let的特点const都有

标签:面试题,console,log,作用域,前端,let,var,const
From: https://blog.csdn.net/weixin_53649241/article/details/140379213

相关文章

  • 前端面试题
    1.v-model是什么?怎么使用?vue中标签怎么绑定事件?一、v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。用于表单数据的双向绑定,其实它就是一个语法糖二、v-model本质上不过是语法糖可以......
  • 表格集算表高性能原理:揭秘纯前端百万行数据秒级响应的魔法
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/集算表(TableSheet)是一个具备高性能渲染、数据绑定功能、公式计算能力的数据表格,通过全新构建的关系型数据管理器结合结构化公式,在高性能表格的基础上提供排序、筛选、样式、行列冻结、自动更新、单元格更新等功......
  • Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在Kotlin中,匿名函数和lambda表达式都是用于表示函数类型的匿名函数(即没有名字的函数)。虽然它们在某些情况下可以互换使用,但是它们在语法和使用场景上存在一些细微的......
  • 21世纪20年代了,还有人无脑喷前端非常简单??(附前端学习所有技术栈)
    前端基础:HTML、CSS、JavaScript前端高级:HTML5、CSS3、JavaScript语法规范:TypeScript、ECMAScrpit、Eslint、Prettier前端热门框架:Vue.js、React.js、Angular.js、Bootstrap、Nuxt.js、Svelte.js、Solid.js、Preact.js、TailwindCSS、UnoCSSJS常用方法组件库:Axios.js、JQuery、......
  • 前端面试必修--面试八股文(根据本人面试经验总结,持续更新)
    前端八股目录前端铜九铁十面试必备八股文——HTML&CSS-掘金(juejin.cn)webpack和vite之间的区别优点:缺点:1、前端工程化解决的问题1.为什么需要前端工程化?2.前端工程化流程常见请求头前端用户验证方案HTTP基本认证Session-Cookie认证Token认证JWT认证单点登录L......
  • 前端面试必修--面试算法题(附带字节跳动真题pdf)
    面试算法题目录简单53.最大子数组和-力扣(LeetCode)415.字符串相加-力扣(LeetCode)206.反转链表-力扣(LeetCode)1.两数之和-力扣(LeetCode)572.另一棵树的子树-力扣(LeetCode)1410.HTML实体解析器-力扣(LeetCode)69.x的平方根-力扣(LeetCode)26.删除有序数组中......
  • 大模型算法面试题(三)
    本系列收纳各种大模型面试题及答案。1、如何评估大模型的效果及安全性一、评估大模型的效果评估大模型的效果主要关注其在特定任务上的表现能力,这通常可以通过以下几个维度来衡量:语言理解能力:语义、语法、语境:评估模型是否能够准确理解输入文本的含义、语法结构以及上......
  • JVM高频面试题
    1.内存模型线程独享:虚拟机栈,本地方法栈,程序计数器线程共享:堆,方法区2.虚拟机栈的作用存放栈帧,栈帧又包含局部变量表,每个方法从被调用到执行结束的过程都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程3.程序计数器存放下一条指令的信息4.堆Java堆......
  • 从校招新星到前端技术专家的成长之路
    引言我在2018年校招进入京东,主要负责广告投放系统的前端工作。在京东,这一路走来,我经历了多种角色转换,我从学生到职场人,从校招生到校招导师,从初级前端开发到前端技术专家,也见证了京东广告业务的蓬勃发展。回顾过去的成长历程,我心中充满了感慨。首先,我要衷心感谢那些与我并肩作战......
  • 关于hash的面试题
    目录题目1.java里,HashMap的底层实现原理2.如何判断一个HashMap是否已经满了?3.HashSet如何检查重复4.HashSet如何判断一个元素是否已经存在.简单的理解hash题目选自牛客网1.java里,HashMap的底层实现原理数组结构:HashMap使用一个数组来存储元素。哈希函数:通过键......