0

0

js知识点总结

冷漠man

冷漠man

发布时间:2024-12-18 22:33:22

|

585人浏览过

|

来源于php中文网

原创

对于那些认为自己了解 JavaScript 但常遇到问题的人,本文重点阐述了以下几点:JS 语言的特点:动态类型、单线程、原型继承与基于类的继承,以及闭包和 this 关键字。原型链:通过 proto 属性实现继承,沿链向上查找属性;关注原型污染和修改原型对象的影响。闭包:允许内部函数访问外部变量,但需注意内存管理。异步编程:Async/Await 简化异步代码,但底层仍基于 Promise 实现。this 关键字:指向取决于调用方式,箭头函数和调用上下文有助于理解。

js知识点总结

JS这玩意儿,你真的懂吗?

这篇文章不是为了教你JS入门,你要是连console.log都没见过,还是先去看看MDN吧。 这篇文章是给那些觉得自己“懂”JS,却经常在一些奇奇怪怪的角落里栽跟头的朋友准备的。我会从一些容易被忽略,或者理解不透彻的点入手,帮你把JS这块地基夯实。读完之后,你或许会发现,自己对JS的理解,还差得远呢。

首先,我们得承认,JS这门语言,它…怎么说呢,有点“奇葩”。它既是动态类型的,又是单线程的;它既有原型继承,又有基于类的继承(ES6+);它既有闭包这种强大的武器,又有this关键字这种让人抓狂的玩意儿。 这些特性,构成了JS的魅力,但也带来了不少坑。

原型和原型链:别被它绕晕了

很多JS开发者对原型和原型链的概念都理解得不够清晰。 记住,原型链的核心思想是通过__proto__属性(虽然不被推荐直接访问)来实现对象的继承。 一个对象的__proto__指向它的原型对象,原型对象又可以有自己的原型对象,这样就形成了一个链条。 当访问一个对象的属性时,如果该对象自身没有该属性,JS引擎就会沿着原型链向上查找,直到找到该属性或者到达原型链的顶端(null)。

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

Person.prototype.greet = function() {
  console.log("Hello, my name is " + this.name);
};

let person = new Person("Alice");
person.greet(); // Hello, my name is Alice

console.log(person.__proto__ === Person.prototype); // true

这看起来简单,但实际应用中,原型链的复杂性很容易导致一些难以调试的bug。 比如,原型污染,或者不经意间修改了原型对象,导致所有实例都受到影响。 所以,写代码的时候,一定要谨慎对待原型链,尽量避免直接修改原型对象。

闭包:一把双刃剑

闭包是JS中一个非常强大的特性,它允许内部函数访问其外部函数的变量,即使外部函数已经执行完毕。 这使得我们可以创建一些非常优雅的代码,比如模块化编程、柯里化等等。

function outerFunction() {
  let outerVar = "Hello";

  function innerFunction() {
    console.log(outerVar);
  }

  return innerFunction;
}

let myClosure = outerFunction();
myClosure(); // Hello

但是,闭包也带来了一些性能问题。 如果闭包中引用了大量的变量,那么这些变量就会一直保存在内存中,即使它们不再被需要,这可能会导致内存泄漏。 所以,使用闭包时,要时刻注意内存管理,避免不必要的内存占用

Deep Search
Deep Search

智能文献、网页检索与分析工具。AI赋能,洞悉万象,让知识检索与总结触手可及

下载

异步编程:Promise, Async/Await

JS是单线程的,这意味着它一次只能执行一个任务。 但是,很多操作都是异步的,比如网络请求、定时器等等。 为了处理异步操作,JS提供了各种机制,比如回调函数、Promise、Async/Await。 其中,Async/Await 是最优雅,也最容易理解的方式。

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error("Error fetching data:", error);
  }
}

fetchData();

Async/Await 使得异步代码看起来像同步代码一样,极大地提高了代码的可读性和可维护性。 但是,要记住,Async/Await 只是语法糖,底层仍然是基于Promise实现的。

this关键字:让人头疼的家伙

JS中的this关键字,它的指向取决于函数的调用方式。 这使得this的指向变得非常难以预测,也是JS中一个让人头疼的问题。 学习箭头函数,以及理解函数的调用上下文,能够帮助你更好地理解和使用this关键字。 记住,在严格模式下,this在非对象方法中指向undefined,这与非严格模式下的全局对象有很大区别,务必注意。

这篇文章只是对JS的一些核心知识点进行了简单的总结,还有很多细节和技巧需要你去探索和学习。 记住,成为JS高手,不是一蹴而就的,需要不断的学习和实践,更需要不断地反思和总结。 多读源码,多写代码,多思考,才能真正掌握JS这门充满魅力,又充满挑战的语言。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

94

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

205

2025.12.24

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

229

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

434

2024.03.01

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

471

2023.08.10

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

130

2025.07.29

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

508

2023.06.20

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号