一、学习 JavaScript 核心概念
本模块覆盖 Lightning Web Components 开发必备的 JavaScript 知识——从核心语言概念到浏览器 API、对象与继承、事件与函数、作用域与闭包、异步模式,每个主题都直接关联 LWC 开发。
学习目标
完成本单元后,你将能够:解释 JavaScript 是什么及为什么对 Salesforce 重要;理解 JavaScript 运行时;识别关键语言特性和语法;把 JavaScript 基础应用到 LWC 开发。
JavaScript 的什么、为什么、如何、运行时与语言
什么/为什么/如何:JavaScript 是 Web 的语言——也是 LWC 的语言;每个 Lightning Web Component 都由 JavaScript 驱动;深入理解 JS = 构建更好的 LWC。
运行时:JavaScript 运行在运行时环境(浏览器、Node.js);运行时提供调用栈、堆内存、事件循环;单线程(一次一个操作);事件循环在不阻塞的情况下处理异步操作。
语言要点:变量(let、const,避免 var);数据类型(string/number/boolean/object/array/null/undefined);运算符;控制流(if/else、switch、for、while、for...of);函数(声明、表达式、箭头函数);模板字面量(`Hello ${name}`);解构(const { field } = object);展开/剩余(...array);模块(import/export)。每个 LWC 的 .js 文件都用这些概念。
二、理解浏览器中的 JavaScript
理解 JavaScript 如何在浏览器中工作、探索 Web API、DOM、Shadow DOM 封装,以及 LWC 如何与这些交互。
学习目标(单元二)
完成本单元后,你将能够:解释 JavaScript 如何在浏览器中工作;区分 JavaScript 运行时和浏览器 API;理解 DOM 和 Shadow DOM;把这些概念连接到 LWC 开发。
浏览器运行时、Web API、DOM 与 LWC
浏览器中的 JavaScript:浏览器提供运行时和 Web API;JavaScript 运行时 ≠ 浏览器,浏览器 ≠ JavaScript。Web API:DOM API(操作 HTML 元素)、Fetch API(HTTP 请求)、Storage API(localStorage/sessionStorage)、Geolocation、Canvas、WebSocket 等。
DOM:HTML 结构的树表示;JavaScript 可查询、创建、修改、删除元素(document.querySelector('.my-class')、element.addEventListener('click', handler))。
Shadow DOM 封装:隔离组件内部结构;样式不外泄、外部样式不侵入;这是 LWC 实现组件封装的方式。
LWC 与 DOM:每个 LWC 渲染在自己的 Shadow DOM;用 this.template.querySelector() 在组件内查询;LWC 通过响应式高效处理 DOM 更新;你很少直接操作 DOM——LWC 替你完成,用 tracked 属性和模板指令即可。
三、使用对象、类与原型继承
深入对象——JavaScript 的基础数据结构——覆盖创建、属性、继承、类,以及 LWC 如何利用对象。
学习目标(单元三)
完成本单元后,你将能够:创建和操作 JavaScript 对象;理解对象的可变性和继承;用 ES6 class 实现面向对象模式;在 LWC 开发中应用对象概念。
对象、类、继承与 LWC
创建对象:对象字面量({ name: 'Acme', industry: 'Tech' })、构造函数(new Account())、Object.create() 显式原型链。
属性与方法:点号(obj.name)、方括号(obj['name'])、方法(obj.getDescription = function() {...})。
可变性:对象可变——属性随时可变;const 阻止重新赋值而非修改;Object.freeze() 实现不可变。
继承:原型链(每个对象链接到原型,方法通过原型共享)。类:ES6 class 是原型的语法糖(class Account { constructor(name) {...} }、extends 继承、static 方法、getter/setter、私有字段 #field)。
LWC 与对象:LWC class 继承 LightningElement;@track、@api、@wire 是类属性上的装饰器;组件状态存在对象属性中;响应式属性变化时触发重新渲染。
四、用事件与函数采取行动
探索函数——定义、调用、作为事件处理器使用——以及事件和函数如何在 LWC 中协同工作。
学习目标(单元四)
完成本单元后,你将能够:用多种方式定义和赋值函数;理解函数调用和 this 关键字;用函数作为事件处理器;在 LWC 中应用事件和函数模式。
函数、事件与 LWC
定义与赋值函数:函数声明(function handleClick() {...})、函数表达式(const handleClick = function() {...})、箭头函数(const handleClick = () => {...},没有自己的 this)。
函数调用:直接调用、方法调用(this 是对象)、构造函数(new)、call/apply/bind 显式绑定 this。
事件处理器:element.addEventListener('click', handleClick)、内联 <button onclick={handleClick}>、事件对象(event.target)。
LWC 中的事件与函数:模板事件绑定、自定义事件(this.dispatchEvent(new CustomEvent('select')))、父子通信(@api 方法、自定义事件)、事件传播(bubbles、composed 标志)、标准 DOM 事件(click、change、submit、keyup)。LWC 模式:用户动作 → DOM 事件 → 处理函数 → 状态更新 → 响应式重新渲染。
五、了解上下文、作用域与闭包
攻克 JavaScript 最重要也常令人困惑的概念:作用域、上下文、this 关键字和闭包。
学习目标(单元五)
完成本单元后,你将能够:理解变量作用域(var vs let vs const);解释 this 关键字和上下文;用闭包实现数据隐私和函数工厂;在 LWC 中应用作用域和闭包模式。
作用域、上下文、this、全局对象与闭包
变量作用域:var 函数作用域(可能泄漏到块外);let/const 块作用域(更安全);作用域链(内层函数可访问外层变量)。
上下文与 this:this 取决于如何调用函数而非在哪里定义;全局(this=window/global)、方法调用(this=对象)、箭头函数(继承外层 this)、事件处理器(this=触发事件的元素)。LWC 常见模式:用箭头函数保留 this。
全局对象:浏览器 window、Node.js global;LWC 模块中没有真正的全局(模块是作用域的)。
闭包:记住词法作用域的函数;内层函数在外层函数返回后仍能访问其变量;用途:数据隐私、函数工厂、模块模式。示例:function createCounter() { let count=0; return ()=>++count; }。在 LWC 中,闭包支撑响应式属性和 wire 适配器。
六、编写异步 JavaScript
探索异步 JavaScript——从回调到 Promise 再到 async/await——以及 LWC 如何用这些模式做服务端调用和数据加载。
学习目标(单元六)
完成本单元后,你将能够:解释为什么异步 JavaScript 无处不在;用回调、Promise 和 async/await;写箭头函数做简洁异步代码;在 LWC 中应用异步模式做 Apex 调用和数据加载。
异步 JavaScript:回调、Promise、async/await 与 LWC
异步无处不在:API 调用、文件读取、定时器、用户事件都是异步;LWC 的 Apex 调用是异步的——必须处理响应而非返回值。
回调模式:传一个函数在操作完成时调用;问题:回调地狱(嵌套回调难以阅读)。箭头函数:array.map(item => item.name)、.then(result => {...})。
Promise:表示未来的值;状态 pending → fulfilled(resolved)或 rejected;.then(...).catch(...);Promise.all(等待全部)、Promise.race(先完成者胜)。
async/await:最干净的模式;async function myMethod() {...}、const result = await asyncOperation();看起来同步、实际异步(非阻塞);用 try/catch 处理错误。
LWC 与异步:@wire 适配器异步返回数据;Apex 调用 methodName().then(...).catch(...) 或 await;生命周期钩子 connectedCallback()、renderedCallback();始终处理 loading/error 状态(if(data) 显示数据、else if(error) 显示错误、否则显示 spinner)。
文章来源:Trailhead - JavaScript Skills for Salesforce Developers

















