news 2026/4/26 16:23:04

前端代码混淆,零基础入门到精通,收藏这篇就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端代码混淆,零基础入门到精通,收藏这篇就够了

目录

一、严格模式与非严格模式

二、双等于三等的区别

三、防抖和节流

四、原型和原型链

五、页面重绘和回流

六、script标签async和defer

七、普通函数和箭头函数的区别

八、JS闭包

1、闭包特点

2、闭包作用

3、闭包风险

4、运用场景

1)常见闭包

2)实现模块化

3)缓存函数

4)封装私有变量

5)实现函数柯里化

7)防抖和节流


一、严格模式与非严格模式

在代码前加

"use strict"

或在class类里书写都会开启严格模式。

开启严格模式后,JS有以下变化:

变量

1、变量使用前必须声明(此时,不声明就使用会直接报错)

2、不能直接用delete删除变量(非严格模式的静默失败->严格模式的直接报错)

对象:

(非严格模式静默失败->严格模式的直接报错)(enumerable 不会报错)

1、对象的属性也不能直接使用delete来进行删除了

函数:

1、参数必须唯一(非严格模式支持参数重复)

2、实参和形参不再具有映射关系(非严格模式的arguments实参被修改,形参也会对应更改;在严格模式下,这两种参数一方被修改,另一方不会被一起更改)

3、不能使用argument的callee方法和caller

4、eval、agument类似这样的关键词名不得作为标识符,包括变量名、函数名等

5、不允许使用eval()、with()这两个方法(这两个方法可能带来风险)

6、不允许出现八机制数(因为八机制数开头是0会有歧义)

7、普通函数在全局里的this变成了undefined(非严格模式时,普通函数在全局里的this指向window)

二、双等于三等的区别

1、“”表示:equality -> 等同的意思,“”两个等号使用时,若两边值的类型不同时,系统会先进行类型转换,再进行比较;

2、“”表示:identity -> 恒等的意思,“=”三个等号使用时,系统不会进行类型转换,若类型不同,就表示一定不等的;

3. 简单说明使用三个等号(===)的判断规则:

(1)如果类型不同,就一定不相等

(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)

(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。

(4)如果两个值都是true,或是false,那么相等

(5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等

(6)如果两个值都是null,或是undefined,那么相等

4. 简单说明使用两个等号(==)的判断规则:

(1)如果两个值类型相同,再进行三个等号(===)的比较

(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:

1)如果一个是null,一个是undefined,那么相等

2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

3)另外两个NaN是不相等的。

三、防抖和节流

**防抖:**单位时间内,频繁触发事件,只执行最后一次

常见场景:输入框输入

若频繁监听可能会出现抖动情况,解决方案有二,一是在输入结束后再点击触发事件,而是通过防抖操作解决。利用定时器可以实现防抖的功能,每次触发先清掉以前的定时器。

**节流:**单位时间内,频繁触发事件,只触发一次

常见场景:高频事件、快速点击、鼠标滑动监听、resize事件、scroll事件

类比场景:火箭发射

代码实现:利用定时器,定时器执行完毕,再开启定时器(不要打断)

第三方库也可实现,lodash库,利用里面的debounce(防抖)和throttle(节流)来做。

代码实现,见文章最后部分,闭包的7里的代码。

四、原型和原型链

原型:

每个普通函数都有prototype属性,称为原型。因为这个属性的值是一个对象,所以也叫原型对象。

作用:

1、存放一些属性和方法,共享给实例对象使用

2、在JavaScript中实现继承

如:

function Person(name, age) { this.name = name this.age = age } function Male() { } Male.prototype = new Person() //实现继承 const man=new Male() console.log(man)

__proto__:

每个对象都有__proto__属性

作用:

这个属性指向它的原型对象

原型链:

对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性。原型对象的__proto__指向原型对象的原型对象,这样一层层形成的链式结构称为原型链。最顶层Object的prototype的__proto__指向null, 到null结束。

常见场景:调用某个对象的方法,若在对象的最近一级有该方法就直接调用,若没有,就继续往上一级查找,找到后调用。

案例:

function Person() { } const person=new Person() person.\_\_proto\_\_===Person.prototype //true person.\_\_proto\_\_.constructor===Person.prototype.constructor //true person.constructor===Person //true Person.prototype.constructor===person.constructor //true

更多关于prototype见这篇:前端 JS面向对象 原型 prototype-CSDN博客

五、页面重绘和回流

重绘:

当元素的视觉效果发生变化,但几何属性(如位置和大小)没有改变时,浏览器会重新绘制元素。这包括改变元素的背景色、边框色、字体颜色等‌。

回流:

当元素的布局属性发生变化时,浏览器需要重新计算元素的位置和大小,并更新页面布局。这包括添加、删除或重新排列DOM节点,修改元素的尺寸、位置或样式等‌。

回流是一个相对昂贵的操作,因为它涉及到大量的计算和重新布局,频繁触发回流会导致性能问题,尤其是在处理复杂或大型的DOM结构时‌。

何时引起重绘?

1、视觉属性变化时:如颜色、背景、边框色、阴影色、文字内容颜色等发生改变时;

2、元素尺寸和位置不变时:重绘发生在元素尺寸和位置不变的情况下,只改变元素的外观属性,如背景颜色、字体颜色等;

3、元素隐藏时:将元素的visibility属性设置为hidden时,虽然会触发重排,但不会影响布局,只会触发重绘。

何时会引起回流?

1、添加或删除可见的Dom元素;

2、元素位置发生变化;

3、元素尺寸发生变化 (包括外边距、内边距、边距大小、高度和宽度等);

4、内容发送变化,比如文本变化或图片被另一个不同尺寸的图片代替;

5、浏览器窗口尺寸发生变化(因为回流是根据视口大小来元素位置和大小的)

回流和重绘的联系?

回流一定引起重绘,而重绘不一定会回流。

六、script标签async和defer
script 标签JS 执行顺序是否阻塞解析 HTMLDOMContentLoaded回调

1、默认情况下,遇到script标签会阻塞下面HTML的解析,先解析完成script标签里的内容,再继续执行解析。(同步解析,依次进行)

2、async情况下,遇到script标签系统不会阻塞HTML的解析,而是创建一个异步路径来进行async脚本的解析。一边解析HTML一遍解析async,当async解析完毕后,系统才会阻塞HTML的解析并立即执行async script里的内容。(解析时不阻塞HTML解析,解析完毕执行时才阻塞HTML,两个解析相互独立进行)

3、defer情况下,不会阻塞HTML解析,直到HTML解析完毕后,defer在最后执行。(DOM元素渲染完毕后执行)

使用情景:

1、默认情况适合一般脚本的顺序执行;

2、async情况适合处理一些无需阻塞并且与DOM元素无关的操作。

(注:这种情况下,执行DOM元素的操作是不稳定的。当DOM元素很少时,可能async有时会比HTML晚解析慢,从而后执行,有时执行正常有时执行失败。但当DOM元素过大需要更多时间解析时,很可能async都已经开始执行了,但DOM还未解析完毕,当async里的代码操作DOM元素时,就可能出现获取不到DOM元素的情况)

3、defer情况适合需要在页面加载完毕后的代码执行,如需要操作DOM的脚本执行。

七、普通函数和箭头函数的区别

1、this绑定:

箭头函数:没有自己的this上下文,而是继承父类的this; (不能使用apply、bind、call来修改this指向)(箭头函数的this在定义时就已确定,之后不得修改)

普通函数:this取决于函数的调用方式。(补充:在全局状态下,非严格模式this是window,严格模式下this是undefined)

2、arguments实参对象

箭头:不包含arguments;

普通:包含arguments对象 (补充:非严格模式下,实参arguments是和形参进行映射的,修改其中一个对应都会改变;严格模式下,并未有映射,修改其一不会修改另一个对应)

3、作用域和闭包

箭头:遵循作用域规则 (块级作用域)

普通:形成闭包

八、JS闭包

JavaScript的普通函数就是一个闭包。

1、闭包特点

1)函数嵌套函数

2)内层函数可以访问外层函数的变量和参数

2、闭包作用

1、防止变量和参数被垃圾回收机制回收(变量持久化)

2、防止变量和参数被外部污染 (变量只在内部可访问)

3、闭包风险

滥用可能会造成内存泄漏。

4、运用场景
1)常见闭包
function makeCounter() { let counter = 0 return function () { counter++ console.log(counter) } } const counter = makeCounter() counter() //1 counter() //2 counter() //3
2)实现模块化
const myModule=(function () { let count=0 function increment(){ count++ } function reset(){ count=0 } function getCount(){ return count } return { increment, reset, getCount } })() myModule.increment() console.log(myModule.getCount()) // 1 myModule.reset() console.log(myModule.getCount()) // 0
3)缓存函数
function memorize(fn) { const cache = {} return function (arg) { if (arg in cache) { console.log("已调用缓存数据") return cache[arg] } else { const result = fn(arg) cache[arg] = result return result } } } function expensiveCalculation(num) { console.log("正在计算" + num + "的阶乘...") let result = 1 for (let i = 2; i <= num; i++) { result *= i } return result } const memorizedCalculation = memorize(expensiveCalculation) console.log(memorizedCalculation(5)) //正在计算5的阶乘... 120 console.log(memorizedCalculation(5)) //已调用缓存数据 120
4)封装私有变量
function createPerson(name, age) { let privateName = name let privateAge = age function getName() { return privateName } function setName(newName) { privateName = newName } function getAge() { return privateAge } function setAge(newAge) { privateAge = newAge } return { getName, setName, getAge, setAge } } const person = createPerson("张三", 18) console.log(person.getName()) //张三 console.log(person.getAge()) //18 person.setName("李四") person.setAge(20) console.log(person.getName()) //李四 console.log(person.getAge()) //20
5)实现函数柯里化
function add(a, b, c, d) { return a + b + c + d } function curry(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn.apply(this, args) } else { return function (...moreArgs) { return curried.apply(this, args.concat(moreArgs)) } } } } const curriedAdd = curry(add) console.log(curriedAdd(1)(2)(3)(4)) //10 console.log(curriedAdd(1, 2)(3, 4)) //10 console.log(curriedAdd(1, 2, 3, 4)) //10
7)防抖和节流
function debounce(fn, wait) { let timeoutId return function (...args) { clearTimeout(timeoutId) timeoutId = setTimeout(() => { fn.apply(this, args) }, wait) } } function throttle(fn, wait) { let isThrottled = false return function (...args) { if (!isThrottled) { isThrottled = true setTimeout(() => { fn.apply(this, args) isThrottled = false }, wait) } } } function handleInput() { console.log("input changed") } const debouncedHandleInput = debounce(handleInput, 500) const throttleHandleInput = throttle(handleInput, 500) document.querySelector("input").addEventListener("input", debouncedHandleInput) document.querySelector("button").addEventListener("click", throttleHandleInput)

总结到此!

2025开年,AI技术打得火热,正在改变前端人的职业命运:

阿里云核心业务全部接入Agent体系;

字节跳动30%前端岗位要求大模型开发能力;

腾讯、京东、百度开放招聘技术岗,80%与AI相关……

大模型正在重构技术开发范式,传统CRUD开发模式正在被AI原生应用取代!

最残忍的是,业务面临转型,领导要求用RAG优化知识库检索,你不会;带AI团队,微调大模型要准备多少数据,你不懂;想转型大模型应用开发工程师等相关岗,没项目实操经验……这不是技术焦虑,而是职业生存危机!

曾经React、Vue等热门的开发框架,已不再是就业的金钥匙。如果认为会调用API就是懂大模型、能进行二次开发,那就大错特错了。制造、医疗、金融等各行业都在加速AI应用落地,未来企业更看重能用AI大模型技术重构业务流的技术人。

如今技术圈降薪裁员频频爆发,传统岗位大批缩水,相反AI相关技术岗疯狂扩招,薪资逆势上涨150%,大厂老板们甚至开出70-100W年薪,挖掘AI大模型人才!

不出1年 “有AI项目开发经验”或将成为前端人投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!

大模型目前在人工智能领域可以说正处于一种“炙手可热”的状态,吸引了很多人的关注和兴趣,也有很多新人小白想要学习入门大模型,那么,如何入门大模型呢?

下面给大家分享一份2025最新版的大模型学习路线,帮助新人小白更系统、更快速的学习大模型!

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:30:12

9年➕前端开发经验,失业两个月,选择困难

这是前端程序员在某红薯平台自述前端被裁的真实经历&#xff01; 2025开年&#xff0c;AI技术打得火热&#xff0c;正在改变前端人的职业命运&#xff1a; 阿里云核心业务全部接入Agent体系&#xff1b; 字节跳动30%前端岗位要求大模型开发能力&#xff1b; 腾讯、京东、百度开…

作者头像 李华
网站建设 2026/4/23 9:17:54

16、系统管理:系统维护脚本全解析

系统管理:系统维护脚本全解析 在系统管理的日常工作中,脚本的运用至关重要。它能帮助管理员高效地完成诸如进程管理、任务调度验证以及系统定时任务执行等任务。下面将详细介绍几个实用脚本的工作原理、运行方法及可能的改进方向。 1. killall 脚本 killall 脚本用于匹配并…

作者头像 李华
网站建设 2026/4/25 6:01:20

JAVA不好找工作了

这是小红书上一位35岁Java开发员找不到工作的真实经历。 说真的&#xff0c;这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型&#xff0c;挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis&#xff0c;稳稳当当过日子。 结果GPT、DeepSee…

作者头像 李华
网站建设 2026/4/22 2:09:14

12、Unix 文件操作与系统信息获取实用指南

Unix 文件操作与系统信息获取实用指南 在 Unix 系统中,有许多强大的工具可用于文件操作和系统信息获取。下面将详细介绍这些工具的使用方法。 1. 使用 sdiff 比较文件差异 sdiff 是一个用于比较两个文件的实用工具,它会在屏幕上并排显示两个文件,方便你直观地比较它们的差…

作者头像 李华
网站建设 2026/4/22 20:15:09

基于51单片机的厨房温湿度烟雾CO粉尘多参数环境监测报警系统设计

1. 系统总体概述 点击链接下载设计资料&#xff1a;https://download.csdn.net/download/qq_39020934/92091166 1.1 设计背景 随着城市生活节奏的加快&#xff0c;厨房已经成为家庭和餐饮场所中使用频率最高、环境变化最为剧烈的区域之一。在厨房环境中&#xff0c;温度、湿度…

作者头像 李华
网站建设 2026/4/21 4:25:27

海立股份子公司亮相行业双会 AI赋能与绿色技术引领压缩机创新

近日&#xff0c;海立股份&#xff08;600619.SH&#xff09;旗下子公司海立电器接连参与两大行业盛会&#xff0c;分别是12月9日至12月12日于长沙召开的以“创新提质&#xff0c;绿色高效”为主题的中国制冷学会学术年会&#xff0c;以及12月10日至12月11日在武汉举办的以“AI…

作者头像 李华