Skip to content
Go back

已读乱码 005

10 min read
Edit

这周总算是把前端相关的基础看完了,快速地扫了一遍 HTML,CSS,JavaScript,TypeScript,Shadcn UI 相关的内容,接下来的安排就是准备做一些实际的项目。

前端

最近一个多月都在唠叨前端相关的事情,真要认真学,就是以我现在上工作的时间,下班闲暇时间,一周的时间也绰绰有余了,毕竟也是工作了四年的多后端,虽然对前端技术不甚了解,对计算机系统的了解也是了然于心了,只是需要对前端相关的知识补充下认知。

具体来说,这段时间我究竟做了什么呢?一开始就是看到了 Next.js 的两个教程。

跟着教程,一知半解地学完了 React 和 Next.js,这个时间点,我的前端知识库还是很久之前的,对 HTML,CSS,JavaScript 也是一知半解。也是多亏了 Next.js 的教程,我对前端工程有了基本的认知。因为对基础的三大基本组件(HTML…)不过,所以回炉重造,重新学了 HTML,CSS,JavaScript。

之后顺便也弄懂了一些其他的前端组件。包含单不只是 TypeScript,Vite,TailwindCSS,Shadcn UI。

MDN 也对前端工具链有一个扫盲方式的介绍,足够详细。

就我个人的粗浅理解,以下是现代前端开发的主要工具链。

其他还有编辑器相关的,格式化,和代码检测工具。可见现代前端工程十分庞杂,强大。

cheatsheet

在了解完基础概念之后,作为快速过一遍的文档,CheatSheets.zip - Ultimate Cheat for Developers 是挺不错的,就像是记录好重点的学习笔记一样。

AI

这周经常性尝试使用 Github Copilot 辅助编程,我的体验还是比较舒服的。

在大代码库的代码编写上,Github Copilot 爱莫能助,设计逻辑性相关的功能实现,如果比较复杂的部分,我会声明式地方式描述给 Copilot,让它帮忙编写函数,然后我再实际验证功能是否满足,这方面的体验良好。

另一方面,我发现 Github Copilot Chat 用来学习编程非常棒。我一有不了解的技术概念就会直接提问给 Copilot,Copilot 的回复我看完之后基本就能了解这项技术概念了。辅助编程学习的体验非常良好。

一个例子:

Q: JavaScript this 关键字 在 JavaScript 中,this 关键字是一个非常重要的概念,它指向当前执行上下文的对象。this 的值在不同的上下文中会有所不同,因此理解它的工作原理对于编写正确的 JavaScript 代码至关重要。

1. 全局上下文

在全局上下文中(即代码在函数外部运行时),this 指向全局对象。在浏览器中,全局对象是 window,在 Node.js 中,全局对象是 global

console.log(this); // 在浏览器中输出: Window

2. 函数上下文

在函数内部,this 的值取决于函数的调用方式。

a. 作为普通函数调用

当函数作为普通函数调用时,this 指向全局对象(在严格模式下,thisundefined)。

function showThis() {
console.log(this);
}

showThis(); // 在非严格模式下输出: Window (浏览器中)

b. 作为对象的方法调用

当函数作为对象的方法调用时,this 指向调用该方法的对象。

const obj = {
  name: 'Alice',
  greet: function() {
   console.log(this.name);
  }
};

obj.greet(); // 输出: Alice

c. 构造函数调用

当函数作为构造函数调用时(使用 new 关键字),this 指向新创建的对象。

function Person(name) {
this.name = name;
}

const person1 = new Person('Bob');
console.log(person1.name); // 输出: Bob

3. 箭头函数

箭头函数没有自己的 this 值,它会捕获其所在上下文的 this 值,即箭头函数中的 this 是在它定义时决定的,而不是在调用时决定的。

const person = {
  name: 'Charlie',
  greet: function() {
    const arrowFunction = () => {
      console.log(this.name);
    };
    arrowFunction();
  }
};

person.greet(); // 输出: Charlie

4. 显式绑定

可以使用 callapplybind 方法显式地绑定 this

a. call 方法

call 方法调用一个函数,并显式指定 this 的值和参数。

function greet() {
  console.log(this.name);
}

const user = { name: 'Dave' };
greet.call(user); // 输出: Dave

b. apply 方法

apply 方法类似于 call,但它接受一个参数数组。

function greet(greeting) {
console.log(greeting + ', ' + this.name);
}

const user = { name: 'Eve' };
greet.apply(user, ['Hello']); // 输出: Hello, Eve

c. bind 方法

bind 方法创建一个新的函数,并将 this 绑定到指定的对象,新的函数可以在以后调用。

function greet() {
  console.log(this.name);
}

const user = { name: 'Frank' };
const boundGreet = greet.bind(user);
boundGreet(); // 输出: Frank

总结

  • 全局上下文this 指向全局对象(浏览器中是 window,Node.js 中是 global)。
  • 函数上下文this 的值取决于函数的调用方式(普通函数、对象方法、构造函数)。
  • 箭头函数this 绑定在定义时的上下文。
  • 显式绑定:使用 callapplybind 方法可以显式绑定 this

理解 this 的行为对于编写和调试 JavaScript 代码至关重要。通过掌握这些规则,你可以更准确地控制函数的执行上下文。

基础的点都有提到,很棒了。

模型方面,Github Copilot 现在提供的基础版本是 GPT-4o,作为预览的功能,可以切换到 o1-mini,o1,或者 Claude 3.5 Sonnet。但是在辅助学习方面还是 GPT-4o 最快也最方便。

最后

最近有打算写一个简单的浏览器插件,也是我自己想要用的浏览器插件,本身功能还是比较简单的,基于 AI 辅助,一边学习一边写,完成一个工程会比较有成就感就是。

Roadmap.sh 中的前端部分也还是要继续跟的,往全栈发展。如果有时间,真的,写一个博客网站?但是部署是个很大的问题。

涉及到代码部署的部分,前端相关 Vercel 的免费版本基本满足需求,如果我构建的网站流量能够达到免费流量之外,那么 20 美元一个月的付费版本我觉得也可以接受,这个阶段,我也应该在网站上有收入了。也是我的最终目的。

路漫漫,一步步走。考虑未来,享受当下。下周见。


Edit
文章标题:已读乱码 005
文章链接: https://blog.guanglai.me/posts/what-is-guanglai-doing-this-week-005/

商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但分发衍生作品时必须采用相同的许可协议。

本文采用 CC BY-NC-SA 4.0 进行许可。


Previous Post
已读乱码 006
Next Post
已读乱码 004