<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ xgqfrms - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ xgqfrms - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:51 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/author/xgqfrms/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何创建和发布一个 Vue 组件库 – 2023 更新 ]]>
                </title>
                <description>
                    <![CDATA[ 早在 2020 年，我就写了一篇关于构建 Vue 组件库的文章 [https://www.freecodecamp.org/chinese/news/how-to-create-and-publish-a-vue-component-library/] 。自从那以后，我使用的包已被弃用了，构建一个库/包的推荐方法是使用 Vite。 开始 我通过运行 npm create vite@latest 启动该项目，并将我的项目命名为 brian-component-lib ，以便与我之前的文章保持一致。当这些选项出现时，我也选择了使用 TypeScript 和 Vue。 组件 我构建的组件是 freeCodeCamp.org 上使用的按钮的一个克隆。 这是该组件的代码。请注意，它使用了 TypeScript 和 Vue 3 中可用的 script setup 格式。 <script setup lang="ts"> defineProps<{ text: string }>() </script> <template>   <button class="btn-cta">{{ ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-create-and-publish-a-vue-component-library-update/</link>
                <guid isPermaLink="false">64f3f9c539dbbb03f0b4f303</guid>
                
                    <category>
                        <![CDATA[ Vue ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ xgqfrms ]]>
                </dc:creator>
                <pubDate>Fri, 01 Sep 2023 01:16:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/09/pexels-pixabay-159711.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-create-and-publish-a-vue-component-library-update/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Create and Publish a Vue Component Library – Update</a>
      </p><!--kg-card-begin: markdown--><p>早在 2020 年，我就写了一篇关于构建 Vue 组件库的<a href="https://www.freecodecamp.org/chinese/news/how-to-create-and-publish-a-vue-component-library/">文章</a>。自从那以后，我使用的包已被弃用了，构建一个库/包的推荐方法是使用 Vite。</p>
<h2 id="">开始</h2>
<p>我通过运行 <code>npm create vite@latest</code> 启动该项目，并将我的项目命名为 <code>brian-component-lib</code>，以便与我之前的文章保持一致。当这些选项出现时，我也选择了使用 TypeScript 和 Vue。</p>
<h2 id="">组件</h2>
<p>我构建的组件是 freeCodeCamp.org 上使用的按钮的一个克隆。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/05/image-160.png" alt="image-160" width="600" height="400" loading="lazy"></p>
<p>这是该组件的代码。请注意，它使用了 TypeScript 和 Vue 3 中可用的 <code>script setup</code> 格式。</p>
<pre><code class="language-js">&lt;script setup lang="ts"&gt;

defineProps&lt;{ text: string }&gt;()

&lt;/script&gt;

&lt;template&gt;
  &lt;button class="btn-cta"&gt;{{ text }}&lt;/button&gt;
&lt;/template&gt;

&lt;style scoped&gt;
.btn-cta {
  background-color: #d0d0d5;
  border-width: 3px;
  border-color: #1b1b32;
  border-radius: 0;
  border-style: solid;
  color: #1b1b32;
  display: block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  -ms-touch-action: manipulation;
  touch-action: manipulation;
  cursor: pointer;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 18px;
  line-height: 1.42857143;
}

.btn-cta:active:hover,
.btn-cta:focus,
.btn-cta:hover {
  background-color: #1b1b32;
  border-width: 3px;
  border-color: #000;
  background-image: none;
  color: #f5f6f7;
}
&lt;/style&gt;
</code></pre>
<p>src/components/FccButton.vue</p>
<p>然后我们需要在库中导出这个组件。我们通过从一个 <code>index.ts</code> 文件导出它来实现。</p>
<pre><code class="language-js">import FccButton from "./components/FccButton.vue";

export { FccButton };
</code></pre>
<p>src/index.ts</p>
<h2 id="">配置</h2>
<p>组件代码准备好了后，我们需要确保 Vite 和 <code>package.json</code> 文件被正确配置了。</p>
<p>Vite 在构建代码时有很多选择。 我们关注的是<a href="https://vitejs.dev/guide/build.html#library-mode">“库模式”</a>。</p>
<pre><code class="language-js">import { defineConfig } from "vite";
import { resolve } from "path";
import vue from "@vitejs/plugin-vue";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      // src/indext.ts 是我们导出组件的地方
      entry: resolve(__dirname, "src/index.ts"),
      name: "BrianComponentLibrary",
      // 运行构建时输出文件的名称
      fileName: "brian-component-lib",
    },
    rollupOptions: {
      // 确保外部依赖项不应捆绑到你的库中
      external: ["vue"],
      output: {
        // 提供全局变量以便在 UMD 构建中可以被外部依赖项使用
        globals: {
          vue: "Vue",
        },
      },
    },
  },
});
</code></pre>
<p>vite.config.ts</p>
<p>这是 <code>package.json</code> 文件。我们需要确保拥有指向构建文件必要的属性。你可以在 VS Code 中将鼠标悬停在属性上，查看有关每个属性的作用的更多信息。</p>
<pre><code class="language-json">{
  "name": "brian-component-lib",
  "version": "1.0.0",
  "type": "module",
  "files": ["dist"],
  "main": "./dist/brian-component-lib.umd.cjs",
  "module": "./dist/brian-component-lib.js",
  "exports": {
    ".": {
      "import": "./dist/brian-component-lib.js",
      "require": "./dist/brian-component-lib.umd.cjs"
    },
    "./style.css": "./dist/style.css"
  },
  "types": "./dist/index.d.ts",
  "scripts": {
    "dev": "vite",
    "build": "vite build &amp;&amp; vue-tsc --emitDeclarationOnly",
    "types": "vue-tsc ",
    "preview": "vite preview"
  },
  "dependencies": {
    "vue": "^3.2.47"
  },
  "devDependencies": {
    "@types/node": "^20.2.5",
    "@vitejs/plugin-vue": "^4.2.3",
    "typescript": "^5.0.2",
    "vite": "^4.3.9",
    "vue-tsc": "^1.4.2"
  }
}
</code></pre>
<p>package.json</p>
<p>为了让 <code>vue-tsc --emitDeclarationOnly</code> 在构建时工作，我们需要将以下属性添加到 tsconfig.json 文件的 <code>compilerOptions</code> 部分：</p>
<pre><code>"outDir": "dist",
"declaration": true,
</code></pre>
<p>我们还需要删除 <code>noEmit: true</code> 属性。这将使我们的类型在包中可用，因此一个使用 TypeScript 和 Vue 的项目不会因为没有声明类型而报错。</p>
<p>我还添加了这一行，以确保我的 <code>App.vue</code> 和 <code>main.ts</code> 文件不会包含在组件库构建文件中。</p>
<p><code>"exclude": ["src/App.vue", "src/main.ts"],</code></p>
<h2 id="">测试该库</h2>
<p>我们现在可以运行 <code>npm run build</code>，然后测试我们的库。为此，请打开一个 Vue 项目（你可以打开一个当前拥有的 Vue 3 项目，或创建一个空白项目）。</p>
<p>在刚刚打开的项目的 package.json 文件中，将以下内容添加到依赖项中:</p>
<p><code>"brian-component-lib": "file:../brian-component-library"</code></p>
<p>确保你输入的文件路径指向组件库所在的正确文件夹。</p>
<p>运行 <code>npm install</code>，现在在你的 <code>node_modules</code> 中应该有了该组件库。</p>
<p>将组件导入其中一个页面以测试其是否正常工作。</p>
<p>注意: 你还需要导入 CSS，因为它在构建过程中构建到自己的文件中了。</p>
<pre><code class="language-js">&lt;script setup lang="ts"&gt;
import { FccButton } from 'brian-component-lib'
import "brian-component-lib/style.css"
&lt;/script&gt;

&lt;template&gt;
    &lt;FccButton text="Run the Tests" /&gt;
&lt;/template&gt;
</code></pre>
<p>现在，当你运行项目时，你应该会看到该按钮。</p>
<h2 id="npm">如何发布到 NPM</h2>
<p>如果你还没有在终端中登录 NPM，则可以通过运行 <code>npm adduser</code> 命令来登录。</p>
<p>然后只需运行 <code>npm publish</code> 命令，包就会被推送，并且在 NPM 上可用。</p>
<h2 id="">总结</h2>
<p>Vite 使发布一个组件库变得相当容易。希望这有帮助。如果有帮助，或者你将来希望看到我的其他内容，<a href="https://twitter.com/the_brianb">请在 Twitter 上告诉我</a>。</p>
<p>你可以在此处查看此代码的仓库：<a href="https://github.com/briancbarrow/vue-component-library-2023">https://github.com/briancbarrow/vue-component-library-2023</a></p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何有效地学习 JavaScript —— 技巧和学习策略 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript 是一种广泛使用的编程语言，十多年来一直统治着软件开发技术栈。 你可以在 Web 应用程序、移动应用程序或你的桌面应用程序中找到 JavaScript。 根据 Statista 在 2022 年所做的一项调查，全球 JavaScript 开发者社区拥有约 1740 万成员，并且还在不断增长。 还有许多 JavaScript 框架和库，例如 React、Angular 和 Vue，它们正在解决各种用例和客户问题。在网上和教科书上也有许多学习 JavaScript 的资源。 尽管这门语言是如此有用和广为人知，但许多 JavaScript 开发人员仍然需要帮助才能自信地学习这门语言。他们也许能够在一些帮助下使用 JavaScript 完成日常开发任务，但可能需要澄清基本概念。此外他们可能在调试问题方面和按时解决客户问题方面有些吃力。 本文的目的根本不是要教你 JavaScript。如果你真的能从这么短的文章中学会 JavaScript，那就太好了，对吧。 相反，本文旨在教你如何学习 JavaScript，以帮助你成为一名自信的 JavaScript 开发人员。 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-learn-javascript-effectively/</link>
                <guid isPermaLink="false">641c1dc05e1a4c068f38d5ee</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ xgqfrms ]]>
                </dc:creator>
                <pubDate>Thu, 23 Mar 2023 04:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/03/freeCodeCamp-Cover-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-learn-javascript-effectively/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Learn JavaScript Effectively – Tips and Learning Strategies</a>
      </p><!--kg-card-begin: markdown--><p><code>JavaScript</code> 是一种广泛使用的编程语言，十多年来一直统治着软件开发技术栈。</p>
<p>你可以在 Web 应用程序、移动应用程序或你的桌面应用程序中找到 JavaScript。</p>
<p>根据 <code>Statista</code> 在 2022 年所做的一项调查，全球 JavaScript 开发者社区拥有约 1740 万成员，并且还在不断增长。</p>
<p>还有许多 JavaScript 框架和库，例如 React、Angular 和 Vue，它们正在解决各种用例和客户问题。在网上和教科书上也有许多学习 JavaScript 的资源。</p>
<p>尽管这门语言是如此有用和广为人知，但许多 JavaScript 开发人员仍然需要帮助才能自信地学习这门语言。他们也许能够在一些帮助下使用 JavaScript 完成日常开发任务，但可能需要澄清基本概念。此外他们可能在调试问题方面和按时解决客户问题方面有些吃力。</p>
<p>本文的目的根本不是要教你 JavaScript。如果你真的能从这么短的文章中学会 JavaScript，那就太好了，对吧。</p>
<p>相反，本文旨在教你<code>如何学习 JavaScript</code>，以帮助你成为一名自信的 JavaScript 开发人员。我将讨论在你学习 JavaScript 之前必须了解的策略和概念，使你的学习更有效率。</p>
<p>如果你也喜欢从视频内容中学习，你可以查看本文配套的视频教程：🙂</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/PDtlYNfo5zE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="How to learn JavaScript effectively? JavaScript learning model for developers" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><!--kg-card-begin: markdown--><h2 id="">让我们回到<code>幼儿园</code></h2>
<p>在你早年学习口语或书面语言（如英语、西班牙语、印地语等）时，你是否在不知道单词的情况下开始造句？你的老师是否试图在不教你字母表的情况下让你拼写单词？可能不会！</p>
<p>任何编程语言也是如此。你必须知道如何循序渐进地学习它。事情是如何运作的？为什么存在某些概念？你不需要关注什么？简而言之，你需要了解<code>基本概念</code>。</p>
<p>正如你需要了解基本的语法和拼写概念才能用你自己的语言正确构成句子一样，编程语言也需要“某些东西”才能正确运行。编程语言的规则和语法称为<code>句法</code>。</p>
<p>顺便说一下，有趣的事实：如果你认为标题中的 Kindergarten 一词是拼写错误，那你就错了，就像我一样：</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Confession:<br><br>I didn't know that "Kindergarden" is not a correct spelling. It's "Kindergarten". 😲<br><br>Google it if you find it surprising too.</p>— Tapas Adhikary (@tapasadhikary) <a href="https://twitter.com/tapasadhikary/status/1625139550132613121?ref_src=twsrc%5Etfw">February 13, 2023</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><!--kg-card-begin: markdown--><p>我指出这一点是为了强调<code>语法</code>与<code>概念</code>一样重要！</p>
<p>考虑到这一切，让我们专注于学习 JavaScript。</p>
<h2 id="javascript">如何使用 JavaScript 主题<code>气泡</code></h2>
<p>毫无疑问，JavaScript 是浩瀚无边的！作为一种编程语言，它涵盖了软件开发的所有重要方面：</p>
<ul>
<li>作用域</li>
<li>函数式编程</li>
<li>数据类型</li>
<li>数据结构</li>
<li>操作</li>
<li>表达式</li>
<li>内存管理</li>
<li>反射</li>
<li>面向对象编程</li>
<li>网络接口</li>
<li>异步编程</li>
<li>异常处理</li>
<li>事件</li>
<li>不可变性</li>
<li>DOM</li>
<li>还有很多</li>
</ul>
<p>如果我们继续，这个名单将会增加，但我们的目标是不同的。你只需要意识到，要掌握这门语言，你可能需要学习的主题数量是非常多的。但我无意吓唬你！</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/02/image-63.png" alt="JavaScript 主题气泡" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>JavaScript 主题气泡</figcaption>
</figure>
<p>如果你是一名初级 JavaScript 开发人员，你可能想知道：</p>
<ul>
<li>我可以这样做吗？</li>
<li>我需要学习多少课程和教程？</li>
<li>是不是太多了？</li>
<li>我如何记住我所学的一切？</li>
<li>总的来说，我怎样才能真正地学习 JavaScript？</li>
</ul>
<p>让我们在进一步阅读时，一起寻找答案。</p>
<h2 id="javascript">介绍 JavaScript 学习模型</h2>
<p>让我介绍一个学习 JavaScript 的概念模型。该模型包含有效学习 JavaScript 必须采用的策略和概念。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/02/image-67.png" alt="JavaScript 学习模型" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>JavaScript 学习模型</figcaption>
</figure>
<p>该模型总结为这六点，我将在稍后进行展开。</p>
<p>✅ 首先，你需要学习<code>编程概念</code>。</p>
<p>✅ 概念 <code>&gt;&gt;&gt;</code> 语法。</p>
<p>✅ 创建一个相关主题的<code>思维导图</code>。</p>
<p>✅ <code>循序渐进地</code>练习。</p>
<p>✅ 你不必担心大多数 JavaScript 中<code>奇怪的事情</code>。</p>
<p>✅ 构建连接概念的<code>项目</code>。</p>
<h2 id="javascript">编程概念与 JavaScript</h2>
<p>首先，将基本编程概念与 JavaScript 明确分开。这些基本编程概念在大多数编程语言中都很常见。</p>
<p>学好它们将帮助你轻松掌握任何编程语言。一些基本的编程概念是：</p>
<ul>
<li><strong>变量</strong>：在编程中，变量是你提供给存储值的内存位置的人类可读名称。例如，<code>car</code>、<code>students</code> 和 <code>oranges</code> 都是变量名。</li>
<li><strong>值</strong>：值是我们通常操纵、改变或用来创造其他值的东西。我们给变量赋值。例如，<code>Honda</code> 可以是变量 <code>car</code> 的值。</li>
<li><strong>数据类型</strong>：数据类型指示值的特定类型，例如数字、字符串、布尔值等。</li>
<li><strong>运算符</strong>：编程中的运算符是帮助我们执行加法、减法、乘法、连接等运算的符号。</li>
<li><strong>条件和控制流程</strong>：编程中的条件是导致某些操作的语句。就像如果发生这种情况，那么就做那个，否则做一些其他的事情。</li>
<li><strong>循环</strong>：编程中的循环是关于在特定条件下以相同顺序重复一堆任务。编程语言中有不同的循环可用，一些常见的循环是 <code>for</code> 循环、<code>while</code> 循环和 <code>do-while</code> 循环。</li>
<li><strong>函数</strong>：函数是你希望一遍又一遍执行的代码块，而不是到处重复它。你通过给它一个名字和一堆指令来创建一个函数，当你调用它时就会执行它。</li>
<li><strong>环境</strong>：编程环境允许开发人员编码、测试、构建和部署。对于环境的各个方面，基本原则保持不变，但技术可能因不同的编程语言而异。</li>
<li><strong>调试</strong>：调试是发现和修复代码中问题的艺术。你必须知道如何调试代码，而不管代码是用什么语言编写的。</li>
</ul>
<p>上面提到的所有点都是基本的编程概念。作为一名 JavaScript 开发者，你必须熟悉这些概念。</p>
<h2 id="">概念 &gt;&gt;&gt; 语法</h2>
<p>我们讨论了编程概念和编程语法之间的差异。它们都很重要。但是，理解概念比记忆语法更能帮助我们。</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">❌ Memorizing Syntaxes.<br><br>✅ Understanding Concepts.</p>— Tapas Adhikary (@tapasadhikary) <a href="https://twitter.com/tapasadhikary/status/1619916335105933313?ref_src=twsrc%5Etfw">January 30, 2023</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><!--kg-card-begin: markdown--><p>让我们举一个我们可以使用编码解决的问题陈述示例。</p>
<p><strong>问题陈述</strong>：如果颜色变量的值为“red”，则返回一个红色的球。否则，返回一个绿色的球。</p>
<p>解决此问题陈述的 JavaScript 代码非常简单：</p>
<pre><code class="language-js">if (color === "red") {
    // 返回一个红色的球
} else if(color === "green") {
    // 返回一个绿色的球
}
</code></pre>
<p>但是如果你死记硬背上面的语法，而不去尝试去理解它背后的概念，你以后可能会出问题。如果有人稍微调整一下问题陈述，你记住的代码语法可能无法产生预期的结果。</p>
<p>在这个问题陈述中，使用的编程概念是<code>流控制</code>。因此，如果你将流程控制画成图表并将其与你的代码语法相关联，你将更永久地将逻辑烙印在你的大脑中。这是它的样子：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/02/image-64.png" alt="image-64" width="600" height="400" loading="lazy"></p>
<p>显示控制流概念的图表。记住：概念第一，语法第二。</p>
<p>如果问题陈述发生变化，你可以更改流程，重新绘制它，并将其映射回你的代码。</p>
<h2 id="javascript">JavaScript 主题思维导图</h2>
<p>当你选择要学习的 JavaScript 主题时，你首先会浏览你认为有帮助的任何资源。这是一个很好的第一步，但<code>有效学习</code>还需要更多。</p>
<p>有效的方法是创建 JavaScript 主题的思维导图并指导你的学习。它将帮助你很好地了解概念并熟悉相关概念。思维导图的另一个优点是有多个主题，你可以形成一个共同的子主题的交集来多次讨论。</p>
<p>这是学习 JavaScript <code>this</code> 关键字的思维导图示例。正如你所见，主题流通过渐进的概念逻辑地移动，以帮助你对 JavaScript 中的 <code>this</code> 关键字有一个基本的理解。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/02/image-65.png" alt="思维导图 - this 关键字" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>思维导图 - this 关键字</figcaption>
</figure>
<p>另一个例子可能是理解 JavaScript <code>Promise</code>。如果你从学习函数开始，然后是调用堆栈和执行上下文，然后是任务和作业队列，最后是<code>Promise</code>，那将会有所帮助。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/02/image-66.png" alt="思维导图 - Promise" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>思维导图 - Promise</figcaption>
</figure>
<p>这听起来像是一个耗时的过程，但从长远来看，按照思维导图方法学习基础知识将为你节省大量时间。</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">The great thing about understanding fundamentals is you save lots of time in the long run.</p>— Tapas Adhikary (@tapasadhikary) <a href="https://twitter.com/tapasadhikary/status/1624406714836475904?ref_src=twsrc%5Etfw">February 11, 2023</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><!--kg-card-begin: markdown--><h2 id="">渐进式练习</h2>
<p>练习使你成为更好的程序员。当你开始理解 JavaScript 概念时，你需要练习它们。循序渐进地练习，让你的学习充满吸引力和持续性。但是，增量练习意味着什么？</p>
<p>在增量实践策略中，你从一个概念的实践代码示例开始。当你转到思维导图中的下一个概念时，你将在前一个示例之上构建下一个练习代码示例。</p>
<p>假设你正在学习 JavaScript 函数并通过创建代码片段进行练习。接下来，当你了解作用域或作用域链时，扩展你用于函数的相同示例，并将作用域和作用域链概念注入其中。</p>
<p>比如说，你正在学习编写一个将两个数字相加的函数。你可能想出这样一个 <code>sum()</code> 函数：</p>
<pre><code class="language-js">var sum = function(a,b) {
  return a + b;
}
</code></pre>
<p>通过创建此函数，你将了解到：</p>
<ul>
<li>如何创建一个函数</li>
<li>如何将参数传递给一个函数</li>
<li>如何从一个函数返回</li>
<li>如何将函数用作一个表达式</li>
</ul>
<p>接下来，一个合乎逻辑的步骤是调用该函数。</p>
<pre><code class="language-js">sum(2,3); // 结果是 5
</code></pre>
<p>很棒！现在，当你了解作用域时，你可以使用相同的函数来练习函数作用域。</p>
<p>看看下面的例子。这里的 <code>calc()</code> 函数使用了我们之前学过的相同的 <code>sum()</code>。</p>
<pre><code class="language-js">function calc() {
  var extra = 5;
  var sum = function(a,b) {
    return a + b;
  }
  let total = extra + sum(2,3);
}
console.log(extra); // 可以在这里访问 extra 吗？
calc();
console.log(total); // 可以在这里访问 total 吗？
</code></pre>
<p>在 <code>calc()</code> 函数中，我们尝试对几个变量的作用域进行试验。同样，现在你可以使用相同的 <code>calc()</code> 函数编写作用域链的示例（我将把它留给你的创造力来尝试）。</p>
<p>这种策略有两个优点:</p>
<ul>
<li>由于你的概念在思维导图中相互关联，因此你的示例也逐个主题地相互关联。</li>
<li>将来，当你通过回顾任何示例来刷新记忆时，你将更容易来回遍历以连接点。</li>
</ul>
<h2 id="">将概念与项目连接起来</h2>
<p>当你逐步练习这些概念时，创建项目是必不可少的。当你学习课程或教程时，你可以练习讲师将会教授的确切项目。这很好，但可以做得更好。</p>
<p>跟随导师完成项目后，尝试暂停一下。想一想，你还可以用刚刚学到的概念构建什么？如果你能想到一个想法或使用该概念构建的用例，那么你就走在了正确的轨道上。接下来，尝试实现它。</p>
<p>你可能会卡在实施阶段。回到你的主题思维导图。找出你需要复习哪些概念以消除障碍。阅读这些概念，逐步实践它们，然后重新开始该项目。这样才能有效学习！</p>
<p>以下是构建项目的一些想法，以帮助你在学习过程中入门：</p>
<ul>
<li><a href="https://www.freecodecamp.org/news/javascript-projects-for-beginners/">40 个适合初学者的 JavaScript 项目</a></li>
<li><a href="https://www.freecodecamp.org/news/python-projects-for-beginners/">20 个适合初学者的 Python 项目</a></li>
</ul>
<h2 id="javascript">JavaScript 很奇怪吗？</h2>
<p>谣言说 <code>JavaScript 很奇怪</code>！好吧，有可能，尤其是当你看到像这些例子这样的代码时:</p>
<pre><code class="language-js">+[] == +![]; // 返回 true

Number([]); // 返回 0

null &gt;= 0; // 返回 true

0.1 + 0.2 == 0.3 // 谁能相信，它返回 fasle！

[10, 1, 3].sort() // 返回, [1, 10, 3]
</code></pre>
<p>你怎么解释这些？解释这些奇怪现象的唯一方法是解释它们的基本概念。除了一些奇怪的小东西（例如，<code>null</code> 的类型在 JavaScript 中仍然是一个<code>对象</code>），你可以通过理解底层概念来解释大多数语法。你需要尝试这样做才能弄清楚这些奇怪的事情。</p>
<h2 id="">所以, 下一步是什么？</h2>
<p>我希望这篇文章能为<code>有效学习 JavaScript</code> 提供见解，让你少走弯路。十多年来，我一直致力于 JavaScript 和基于它的框架/库。我在这里分享的一切都来自我深入学习这门语言的经验。</p>
<p>尝试按照你了解的有关 <code>JavaScript 学习模型</code>的<code>六点</code>进行操作。随意根据你的需要调整它们。如果你有任何进一步的疑问，请随时联系。</p>
<p>欢迎和我联系。</p>
<ul>
<li>如果你想以实用的方式学习 JavaScript、ReactJS、Node.js、Git 以及所有关于 Web 开发的知识，请<a href="https://www.youtube.com/tapasadhikary?sub_confirmation=1">订阅</a> 我的 YouTube 频道。</li>
<li>如果你不想错过每日的 Web 开发和编程技巧，请<a href="https://twitter.com/tapasadhikary">关注 Twitter</a> 和 <a href="https://www.linkedin.com/in/tapasadhikary/">LinkedIn</a>。</li>
<li>关注 <a href="https://www.showwcase.com/atapas398">Showwcase</a> 以进行基于社区的学习。</li>
<li>你可以<a href="https://topmate.io/tapasadhikary">通过电话与我联系</a>。</li>
</ul>
<p>下一篇文章见。在那之前，请照顾好自己，保持快乐。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
