<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>NotionNext BLOG</title>
        <link>https://blog.jddfe.com/</link>
        <description>这是一个由NotionNext生成的站点</description>
        <lastBuildDate>Tue, 20 Feb 2024 03:35:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2024, esmiler</copyright>
        <item>
            <title><![CDATA[打造你自己的 ChatGPT：一份全面指南]]></title>
            <link>https://blog.jddfe.com/article/d867af09-335c-40e0-b1e9-6cc96209f3ce</link>
            <guid>https://blog.jddfe.com/article/d867af09-335c-40e0-b1e9-6cc96209f3ce</guid>
            <pubDate>Wed, 07 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[学习如何在 OpenAI 的 ChatGPT 平台上轻松创建属于你的自定义 GPT，这里有一份详细的分步指南。让我们开始制作你独一无二的聊天助手吧！]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-d867af09335c40e0b1e96cc96209f3ce"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-4a73da268c0c4f489e27bde25fdd030e">学习如何在 OpenAI 的 ChatGPT 平台上轻松创建属于你的自定义 GPT，这里有一份详细的分步指南。让我们开始制作你独一无二的聊天助手吧！</div><div class="notion-text notion-block-250bb9ce63cf4dfd88b260cb44333c20">OpenAI 最近推出了一个新功能，让每个人都能轻松打造专属的 GPT 模型。如今，你无需再为了定制化你的 ChatGPT 解决方案而与复杂的大语言模型（LLMs）或 Langchain 抗争。<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fopenai.com%2Fblog%2Fintroducing-gpts">来认识一下 GPTs 吧！</a></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-0364a57eb77549c89d10551ed01054af"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F7bdf1e12-6e66-48c7-9e47-44a08c88e4d0%2FUntitled.png?table=block&amp;id=0364a57e-b775-49c8-9d10-551ed01054af&amp;t=0364a57e-b775-49c8-9d10-551ed01054af&amp;width=1642&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-5aeed5fd65b94d92a52185c30b2adbf4" data-id="5aeed5fd65b94d92a52185c30b2adbf4"><span><div id="5aeed5fd65b94d92a52185c30b2adbf4" class="notion-header-anchor"></div><a class="notion-hash-link" href="#5aeed5fd65b94d92a52185c30b2adbf4" title="如何创建自定义 GPT 的分步教程 - OpenAI"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">如何创建自定义 GPT 的分步教程 - OpenAI</span></span></h3><div class="notion-text notion-block-5fa2d7c573aa46bb8791b557a25b0831"><b>第一步：注册（账号设置）</b></div><div class="notion-text notion-block-c0d780922f654b49915c2cb7371dd3a7">首先，你需要订阅 ChatGPT Plus，月费 20 美元。这个订阅包含以下内容：</div><ul class="notion-list notion-list-disc notion-block-ada9c9db47764dc39d6745eb773e2a3a"><li>使用 GPT-4，目前最先进的模型</li></ul><ul class="notion-list notion-list-disc notion-block-2503cbb475934b72917e5afbe3d70d74"><li>浏览、创建和运用 GPTs</li></ul><ul class="notion-list notion-list-disc notion-block-efb0b3e1dcc54cb1a55cfe5343ae7fe7"><li>使用 DALL·E、浏览器、高级数据分析等附加工具</li></ul><div class="notion-text notion-block-d9873219af6b43d8961dad43f21355ad">你可以通过 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fchat.openai.com%2F">chat.openai.com/</a> 进行注册和订阅。</div><div class="notion-text notion-block-e397bd0ca9514d1593423d4479c21d2a">了解更多关于 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fopenai.com%2Fblog%2Fchatgpt-plus">ChatGPT Plus 的信息</a>。</div><div class="notion-text notion-block-90388b6f585b42f79c910eae0d383d6d"><b>第二步：创建新的自定义 GPT</b></div><div class="notion-text notion-block-38f39f68fd5041aabf62288c7ebc2882">在你的 chat.openai.com 控制面板上，点击“探索”按钮。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-93e3ee3f0b674300a5555533d1c7c7fb"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F10838fe1-dd9c-44c3-8deb-4d454ee280c3%2FUntitled.png?table=block&amp;id=93e3ee3f-0b67-4300-a555-5533d1c7c7fb&amp;t=93e3ee3f-0b67-4300-a555-5533d1c7c7fb&amp;width=1476&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-f57ba9ccd88f4aad9818033fd060a2b7">然后，点击“创建 GPT”按钮。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-046877698d314d8a895076aa99e2a1b5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F7c4f6275-bfda-4fd9-a505-3eb72039b81f%2FUntitled.png?table=block&amp;id=04687769-8d31-4d8a-8950-76aa99e2a1b5&amp;t=04687769-8d31-4d8a-8950-76aa99e2a1b5&amp;width=1588&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-52ed27bd6a5e4367ac33b011bae727f2"><b>第三步：填写基础信息</b></div><div class="notion-text notion-block-48c3bdb6d7e4432e8cdb93381f87f472">接下来，系统会带你进入“GPT 构建器”界面，在这里你需要填写：</div><ul class="notion-list notion-list-disc notion-block-f0fd64565b664e0da86e89f3214278df"><li>GPT 的功能（用一句话概括）</li></ul><ul class="notion-list notion-list-disc notion-block-4e05a240892f4e45910f966e4b73eb0f"><li>GPT 的名称（系统会提供建议）</li></ul><ul class="notion-list notion-list-disc notion-block-b6d7dc0feead4475b6e7ab5497116ad5"><li>一个头像（系统也会自动生成）</li></ul><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-fb5534cd097e4731abe64d974fcd14e8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2Fe1c4aba6-70c5-487b-b040-0cdc7c70e56f%2FUntitled.png?table=block&amp;id=fb5534cd-097e-4731-abe6-4d974fcd14e8&amp;t=fb5534cd-097e-4731-abe6-4d974fcd14e8&amp;width=1552&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-fa009aba5ad64f85b35d4f1e0eb528aa"><b>第四步：给出详细说明</b></div><div class="notion-text notion-block-06968806dd324535a99f2830aa94c456">在回答了一些关于这个工具的问题后，系统会引导你对这个 GPT 进行细致的调整。它会不断询问，直到收集到足够的信息来启动这个助手。</div><div class="notion-text notion-block-cdc34f3a94904a0488347d85435c35f9">比如，如果我想创建一个帮助我改正语法的自定义 chatGPT，GPT 构建器会这样询问我：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ee85b62f9c974a58a430bfb4a6085981"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2Fa9f4ea4f-7fe7-4caf-a428-2ca81ba68015%2FUntitled.png?table=block&amp;id=ee85b62f-9c97-4a58-a430-bfb4a6085981&amp;t=ee85b62f-9c97-4a58-a430-bfb4a6085981&amp;width=1540&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0f8668226439475f8445bc4b0515cc3e"><b>第五步：在沙盒中尝试！</b></div><div class="notion-text notion-block-614a874c29f8485a865817ce8fba414b">一旦有了足够的信息，你就可以在右侧的面板中试运行你的 GPT。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-bc056fe9d33f47db83de563e6a088ce8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2Fda298735-a09e-483f-b9fe-e76d842691e8%2FUntitled.png?table=block&amp;id=bc056fe9-d33f-47db-83de-563e6a088ce8&amp;t=bc056fe9-d33f-47db-83de-563e6a088ce8&amp;width=1514&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-4c3a7d4153464d6d9992382fb4798259"><b>第六步：不断调优，直至达到完美！</b></div><div class="notion-text notion-block-0e2288a6b048453fae782eb843ebbaa2">你可以随时对 GPT 进行调整，使其更好地满足你的需求。在左侧面板与“构建器”进行对话，提出你的问题或指导。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-20f52f0c96c940d38263d7f11e3036c1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F7f969ca4-d9ca-4077-bbb4-fbce4c4853dd%2FUntitled.png?table=block&amp;id=20f52f0c-96c9-40d3-8263-d7f11e3036c1&amp;t=20f52f0c-96c9-40d3-8263-d7f11e3036c1&amp;width=1588&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><hr class="notion-hr notion-block-dd51026f044a4a8e8da3ded1d84bec2b"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-22b18155f7874999990be14f682fc1da" data-id="22b18155f7874999990be14f682fc1da"><span><div id="22b18155f7874999990be14f682fc1da" class="notion-header-anchor"></div><a class="notion-hash-link" href="#22b18155f7874999990be14f682fc1da" title="打造你专属的自定义 GPT"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">打造你专属的自定义 GPT</span></span></h3><div class="notion-text notion-block-89870199fa2d4aa89ed2d843da204405">除了聊天界面，你还可以通过直观的图形用户界面来配置各种功能。点击页面顶部的“配置”标签，你会发现有许多设置可以调整。</div><div class="notion-text notion-block-9e9174afd5a64234845c623b7617832b"><b>基本设置</b></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a08a747c07914d9ab6e592d4b2448600"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F5f72f712-3db7-44f0-a0db-4b87c39bf752%2FUntitled.png?table=block&amp;id=a08a747c-0791-4d9a-b6e5-92d4b2448600&amp;t=a08a747c-0791-4d9a-b6e5-92d4b2448600&amp;width=1566&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0b29622324a74e3e840594e037781ffb">在这里你可以修改：</div><ul class="notion-list notion-list-disc notion-block-b0ca2b6bb61f4a1a899dfb9e4fa0f53c"><li>头像</li></ul><ul class="notion-list notion-list-disc notion-block-441ea9ee2aef4f12895d7677caa8f8f5"><li>名字</li></ul><ul class="notion-list notion-list-disc notion-block-5c95cec336d047f39bfea1a2941ec0ea"><li>描述</li></ul><ul class="notion-list notion-list-disc notion-block-284675e5296d4b27823c486ad266c8fb"><li>指南</li></ul><div class="notion-text notion-block-e76388b732b84982ba669af3cd32c16f">记得，当你或其他人开始使用这个 GPT 时，头像、名字和描述会作为欢迎界面显示出来。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-60abd0852dd246b18e4938b07b43a383" data-id="60abd0852dd246b18e4938b07b43a383"><span><div id="60abd0852dd246b18e4938b07b43a383" class="notion-header-anchor"></div><a class="notion-hash-link" href="#60abd0852dd246b18e4938b07b43a383" title="自定义 GPT 的进阶定制"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>自定义 GPT 的进阶定制</b></span></span></h3><div class="notion-text notion-block-e786b4c6e0e14fb3a582fd3ce07f2aa3">自定义 GPT 能做的不止这些！在“配置”标签页向下滚动，你会看到更多选项：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5cf5b01952254641b52c1325262124bf"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2Fd9fa57a6-9b50-41a7-9405-6ccdba394690%2FUntitled.png?table=block&amp;id=5cf5b019-5225-4641-b52c-1325262124bf&amp;t=5cf5b019-5225-4641-b52c-1325262124bf&amp;width=1596&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><ol start="1" class="notion-list notion-list-numbered notion-block-160da79b639b425c924f7cd7fcea2add"><li><b>会话开始器</b></li></ol><div class="notion-text notion-block-f0cde19d41204c8f827a33acaba62b74">会话开始器是聊天界面上方的按钮，可以作为执行特定任务的快捷方式。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-e23b5548c0154fc18719240bd8b1a3d8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2Fb9f27f8a-700a-43d3-810e-b00d8ce63b03%2FUntitled.png?table=block&amp;id=e23b5548-c015-4fc1-8719-240bd8b1a3d8&amp;t=e23b5548-c015-4fc1-8719-240bd8b1a3d8&amp;width=1584&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><ol start="1" class="notion-list notion-list-numbered notion-block-944aae376a144383bdeb7a99bda3865e"><li><b>知识库（文件上传）</b></li></ol><div class="notion-text notion-block-cd0f2bba4acc44e4b5ce0563c88ca4ca">你可以上传文件，比如 PDF，这些文件将作为 GPT 的额外知识资源。</div><div class="notion-text notion-block-d11caebe019f4c28bf4f3397615cf41e">GPT 的知识原本是有限的，仅包括它训练时的数据。现在，你可以通过上传 PDF 文件来丰富它的知识库。</div><ol start="1" class="notion-list notion-list-numbered notion-block-f50b9938856244b8868108f3635724ae"><li><b>功能（网页浏览、图像生成和代码解释）</b></li></ol><div class="notion-text notion-block-6de67c12d98b4db3a812854641eec3f7">你默认可以使用以下功能：</div><ul class="notion-list notion-list-disc notion-block-e4ca5b4ba9f94de2ba95d9ef29516f95"><li>使用 Bing 浏览器进行网页浏览</li></ul><ul class="notion-list notion-list-disc notion-block-0642205b403a4c0c99294c71712afb5e"><li>使用 Dall-E 3 生成图像</li></ul><ul class="notion-list notion-list-disc notion-block-0d6c8d24327d48d69189623d7ac9b4f3"><li>读写代码</li></ul><div class="notion-text notion-block-ebac636342374981b80dbb8e47d788d5">如果你不需要某些功能，也可以选择关闭它们。</div><ol start="1" class="notion-list notion-list-numbered notion-block-32c028a7fdf04248ad054c918add8f87"><li><b>动作</b></li></ol><div class="notion-text notion-block-a6c2ebef686d46a28f3f7f74b4c53166">这是 GPT 中我最喜欢的一个功能。通过动作，你可以让 AI 调用外部 API！现在，你不仅可以使用市面上的 API，甚至还可以连接你自己创建的 API。</div><div class="notion-text notion-block-6c9fcd9f071f4e369fce2fd580159faf">想了解更多关于 GPT 动作的信息，请访问：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Factions">platform.openai.com/docs/action…</a>。</div><div class="notion-text notion-block-ab9a5b5f23d84af7a57ae2f4772b637e">点击“创建新动作”按钮，在这里你可以输入想要使用的 API 的 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fswagger.io%2Fspecification%2F">Open API 模式</a>。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-dbaff28b953043bc808cd495cdbd6690"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F307ee986-052c-4d05-bb99-b6bb5511bbce%2FUntitled.png?table=block&amp;id=dbaff28b-9530-43bc-808c-d495cdbd6690&amp;t=dbaff28b-9530-43bc-808c-d495cdbd6690&amp;width=1396&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><blockquote class="notion-quote notion-block-54e1885efc37420cb862fda7791cd77d"><div>利用动作功能，OpenAI 现在为你的 API 提供 OpenAPI 规范的托管服务。这意味着你不必自己托管 OpenAPI 规范了。你可以导入现有的 OpenAPI 规范，或者利用 GPT 创建器的界面从零开始创建一个新的规范。</div></blockquote><div class="notion-text notion-block-a849aab4a36345c38b8af4df374910a1">还有一个“认证”标签页，你可以在这里设置通过 API 密钥或 oAuth 来认证 API 的使用。</div><div class="notion-text notion-block-9158b14fa6f94d1a8e0a4f70a54d8d6d">如需进一步了解如何将自定义 GPT 连接到互联网，请阅读这篇文章：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fserpapi.com%2Fblog%2Fhow-to-connect-chatgpt-to-the-internet%2F">如何将自定义 GPT 连接到互联网</a>。</div><div class="notion-text notion-block-bbab4a235af14340b64d7d90bf43f38b">这个 GPT 不只是为个人使用而设计的！你可以通过分享链接或将其设为完全公开，来邀请其他人使用。</div><div class="notion-text notion-block-824eb0a22ceb4ba4b7cff227d7c3a8d2">要做到这一点，点击右上角的保存按钮，然后设置可见性。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d4886e740b8d45f6ab075f66b34c4f5f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbc6a1f0e-932b-4e5d-840b-b76588a3e617%2F08637ba3-870d-4685-b52f-fec252ed270e%2FUntitled.png?table=block&amp;id=d4886e74-0b8d-45f6-ab07-5f66b34c4f5f&amp;t=d4886e74-0b8d-45f6-ab07-5f66b34c4f5f&amp;width=1334&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-ea015fec3a4549008d88bfd6d4e2b2f7" data-id="ea015fec3a4549008d88bfd6d4e2b2f7"><span><div id="ea015fec3a4549008d88bfd6d4e2b2f7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ea015fec3a4549008d88bfd6d4e2b2f7" title="创建自定义 GPT 视频教程"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">创建自定义 GPT 视频教程</span></span></h3><div class="notion-text notion-block-106b3a25580043c7b06f93735d3bbdd8">这是一个视频教程，由 OpenAI 团队的 DevDay 提供，教你如何创建自己的自定义 ChatGPT。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-11ae01de85af475e8eaece1564c166ff" data-id="11ae01de85af475e8eaece1564c166ff"><span><div id="11ae01de85af475e8eaece1564c166ff" class="notion-header-anchor"></div><a class="notion-hash-link" href="#11ae01de85af475e8eaece1564c166ff" title="常见问题解答"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">常见问题解答</span></span></h3><div class="notion-text notion-block-f3f6bac983004021bc004f408daa8342"><b>OpenAI 提供的自定义 GPT 需要多少费用？</b></div><div class="notion-text notion-block-e90e5a0e4c7e44158b6e847f12f3d086">你需要支付每月 20 美元的费用，因为使用它需要订阅 ChatGPT Plus。</div><div class="notion-text notion-block-f99b451b173a4518827f8bf3e9862807"><b>如何编辑自定义 GPT？</b></div><div class="notion-text notion-block-88428cf7a8034045809078cb52f39d89">点击探索菜单，然后在你想要编辑的自定义 GPT 上点击“编辑”。</div><div class="notion-text notion-block-96b4908cc9d54f6f893804b85a609922"><b>如何删除自定义 GPT？</b></div><div class="notion-text notion-block-c56f6a6221434b0ba25e1c4e32adc2ac">在探索菜单中，点击你想要删除的自定义 GPT 上的三个点，然后选择“删除 GPT”。</div><div class="notion-text notion-block-cdc4eb37c9da4a6fbeead6a8d3b3f060"><b>能否将 OpenAI 的自定义 GPT 连接到互联网？</b></div><div class="notion-text notion-block-96cf2f432a874579bc7874cdd998fc21">可以，自定义 GPT 能够连接到互联网。默认情况下，它可以连接到 Bing 搜索引擎，或者你可以通过动作功能进行个性化定制。</div><div class="notion-text notion-block-ae17facf5bca42908974eca404d6ac28"><b>如何将自定义 GPT 连接到 Google？</b></div><div class="notion-text notion-block-e8fdbc2aeb6244648112561fbcfd45e3">你可以通过动作功能使用外部 API 将自定义 ChatGPT 连接到 Google。例如，你可以使用 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.juejin.cn/?target=https%3A%2F%2Fserpapi.com%2Fsearch-api">SerpApi 提供的 Google 搜索 API</a>。</div><div class="notion-blank notion-block-35b37d1898d14ab1b5e62eeafc3b84d7"> </div><div class="notion-callout notion-gray_background_co notion-block-21dc851f21fa4f75a7cb66f3cf8afdf2"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">有关Notion安装或者使用上的问题，欢迎您在底部评论区留言，一起交流~</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Blog又双叒一次搬家了]]></title>
            <link>https://blog.jddfe.com/article/f9fda6d4-64ee-4bbe-8cd8-be605f3f2613</link>
            <guid>https://blog.jddfe.com/article/f9fda6d4-64ee-4bbe-8cd8-be605f3f2613</guid>
            <pubDate>Sat, 06 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[2024新的一年给我的博客一个新的开始，虽然折腾博客也有好些年了，虽固定的读者不是很多，但每一个相遇都是“有缘人”，愿我们在这里继续碰撞，遇到更多的光，产生更多的亮]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-f9fda6d464ee4bbe8cd8be605f3f2613"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-callout notion-gray_background_co notion-block-2cc87223d5b1478ba2bc922baa5d6eb9"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="😀">😀</span></div><div class="notion-callout-text">这已经不是第一次折腾Blog了，当然也不会是最后一次。</div></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-0b156c6f2b0f446fa1432504ea23a05c" data-id="0b156c6f2b0f446fa1432504ea23a05c"><span><div id="0b156c6f2b0f446fa1432504ea23a05c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0b156c6f2b0f446fa1432504ea23a05c" title="📝 为什换到NotionNext"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">📝 为什换到NotionNext</span></span></h2><div class="notion-text notion-block-8c257f6322484337a6d08ec4abeed51f">在此之前用过wordpress、GitHub Page、Hexo Github，以及Evernot和有道云笔记，但用了Notion真的体验感直接拉满，真的一款好用的产品诠释了什么是不可回撤的效率，也是因为Notion才把个人博客再次折腾到NotionNext。</div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-74f6d104f65b4914994bb4a9cd394595" data-id="74f6d104f65b4914994bb4a9cd394595"><span><div id="74f6d104f65b4914994bb4a9cd394595" class="notion-header-anchor"></div><a class="notion-hash-link" href="#74f6d104f65b4914994bb4a9cd394595" title="说说优点"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">说说优点</span></span></h3><ul class="notion-list notion-list-disc notion-block-9d93e2db640f4409a6d3bac279d80cbb"><li>直接和Notion集成，想到什么写什么，比起之前的，需要命令行在去写markdown，真的是编辑界面好多了。</li></ul><ul class="notion-list notion-list-disc notion-block-187602a974db4376aa372702dec560b1"><li>内容直接在Notion中存储，省去一堆上传图片的烦恼，数据有保证。</li></ul><ul class="notion-list notion-list-disc notion-block-c9c9a1b0d766437e84d2919119df70e1"><li>真的很节省时间，Vercel直接部署也很快。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-e1396e3fa0e44e0a8716a52eef5c2396" data-id="e1396e3fa0e44e0a8716a52eef5c2396"><span><div id="e1396e3fa0e44e0a8716a52eef5c2396" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e1396e3fa0e44e0a8716a52eef5c2396" title="缺点也是有的"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">缺点也是有的</span></span></h3><ul class="notion-list notion-list-disc notion-block-88475e4458bd426595b994231b290f98"><li>看了Issues 确实还有很多问题，间接导致系统不稳定，会频繁升级。</li></ul><ul class="notion-list notion-list-disc notion-block-526b71dd26bb4b6c8a29d9ab7c84c5be"><li>生态系统（皮肤、插件）还不够健全，希望可以参与到生态建设当中。</li></ul><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-b9bb3da6831041e7a9f5c100c3c77b09" data-id="b9bb3da6831041e7a9f5c100c3c77b09"><span><div id="b9bb3da6831041e7a9f5c100c3c77b09" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b9bb3da6831041e7a9f5c100c3c77b09" title="🎉 最后"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🎉 最后</span></span></h2><div class="notion-text notion-block-2394ab7e9f4b4d81a1658a3b111f5687">最后还是要庆祝一下这次的”搬家“，坚持码字，快乐生活。</div><div class="notion-blank notion-block-cb7143fd0ed14abba1f73aa21d34721d"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[搞懂防抖、节流及应用场景]]></title>
            <link>https://blog.jddfe.com/article/410f936e-efdb-4f8b-b8e7-af270b3659d3</link>
            <guid>https://blog.jddfe.com/article/410f936e-efdb-4f8b-b8e7-af270b3659d3</guid>
            <pubDate>Sun, 28 Aug 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[防抖和节流你是否有时候傻傻分不清楚的时候？
教你一个技巧绝对不会再弄混。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-410f936eefdb4f8bb8e7af270b3659d3"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-callout notion-gray_background_co notion-block-c0eb1e4303c641ae9d3d908f9747680b"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="😀">😀</span></div><div class="notion-callout-text">防抖和节流你是否有时候傻傻分不清楚的时候？
教你一个技巧绝对不会再弄混。</div></div><div class="notion-text notion-block-6ef8f6581a4b4b58a9d00efd27a4be9f">先来认识一下这两个基础的概念，<code class="notion-inline-code">防抖</code>和<code class="notion-inline-code">节流</code>是前端开发中常用的函数优化手段，它们可以限制函数的执行频率，提升性能和用户体验。在我们的日常开发中，经常会遇到一些需要对函数进行优化的场景，比如防止表单的重复提交。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-3408c4e12a524dd3918f08c648896c39" data-id="3408c4e12a524dd3918f08c648896c39"><span><div id="3408c4e12a524dd3918f08c648896c39" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3408c4e12a524dd3918f08c648896c39" title="防抖(debounce)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">防抖(debounce)</span></span></h3><blockquote class="notion-quote notion-block-239b24ba13284411bc4ba79845d9e67e"><div>事件被触发n秒后再执行回调，如果在这n秒内又被触发，则重新计时。</div></blockquote><div class="notion-text notion-block-59546affd7154e0cb885533fae7a6282">防抖，顾名思义，防止抖动，什么叫抖动，事件被高频触发，想象你在用鼠标点击按钮操纵一个小人让他有跳跃的动作，你狂点鼠标，小人狂跳，这就是最直观的抖动现象。</div><div class="notion-text notion-block-21d745834c754999b29a414a49bff55f">直接上代码</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-e5ce540e36164248a715a1811d560761" data-id="e5ce540e36164248a715a1811d560761"><span><div id="e5ce540e36164248a715a1811d560761" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e5ce540e36164248a715a1811d560761" title="节流(throttle)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">节流(throttle)</span></span></h3><blockquote class="notion-quote notion-block-54aac39bd67e4ebe935ff69dbc70c2ad"><div>规定在一个单位时间内，只能触发一次函数。如果这个单位时间内触发多次函数，只有一次生效。</div></blockquote><div class="notion-text notion-block-4e8a1ae3c12c489ea58d5fd793663518">简单的可以理解为指定时间间隔只执行一次任务。</div><div class="notion-text notion-block-381b433106a64175a39afc5efc5bc1b3">直接看代码：</div><div class="notion-text notion-block-e831b5c4ffa741d88dcc5f32baeec70c">注：节流函数并不止上面这种实现方案,例如可以完全不借助setTimeout，可以把状态位换成时间戳，然后利用时间戳差值是否大于指定间隔时间来做判定。也可以直接将setTimeout的返回的标记当做判断条件-判断当前定时器是否存在，如果存在表示还在冷却，并且在执行fn之后消除定时器表示激活，原理都一样。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2664b7610fb4428d8c7de6ad8dc50fee" data-id="2664b7610fb4428d8c7de6ad8dc50fee"><span><div id="2664b7610fb4428d8c7de6ad8dc50fee" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2664b7610fb4428d8c7de6ad8dc50fee" title="防抖与节流的区别"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>防抖与节流的区别</b></span></span></h3><div class="notion-text notion-block-0efaecf9094e459a910380dc73990662">上面已经介绍过两者的定义，我们在看下两者的区别，及如何来永远记住他们</div><div class="notion-text notion-block-9e332d45d3e443bc8a6224764e67b0db">防抖：它限制函数在一段连续的时间内只执行一次。当连续触发某个事件时，只有在事件停止触发一段时间后，才会执行函数。</div><div class="notion-text notion-block-0d47649c168e474cbdf24aec596f322a">节流：它按照固定的时间间隔执行函数。当连续触发某个事件时，每隔一段时间执行一次函数。</div><div class="notion-text notion-block-e4dc851f16614589aa5de60410bb516a">简而言之，防抖是在事件停止触发后延迟执行函数，而节流是按照固定的时间间隔执行函数。</div><div class="notion-text notion-block-03ba0fa166234b5eb3f2b7b31a96626a">王者荣耀大家都玩过吧，里面的英雄都有一个<code class="notion-inline-code">攻击间隔</code>，当我们连续的点击普通攻击的时候，英雄的攻速并不会随着我们点击的越快而更快的攻击。这个其实就是节流，英雄会按照自身攻速的系数执行攻击，我们点的再快也没用。</div><div class="notion-text notion-block-32d41022178344fd8e7153201fd3e2c3">而防抖在王者荣耀中就是<code class="notion-inline-code">回城</code>，在游戏中经常会遇到连续回城嘲讽对手的玩家，它们每点击一次回城，后一次的回城都会打断前一次的回城，只有最后一次点击的回城会被触发，从而保证回城只执行一次，这就是防抖的概念。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-39d3da535e16489399957c3610243b9b" data-id="39d3da535e16489399957c3610243b9b"><span><div id="39d3da535e16489399957c3610243b9b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#39d3da535e16489399957c3610243b9b" title="应用场景"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">应用场景</span></span></h3><div class="notion-text notion-block-b36a8c8f312b48678ecdac0b94488ad9">防抖：</div><div class="notion-text notion-block-8d02f21fb66d46cc8f62fe67f2d971d7">search搜索联想，用户在不断输入值时，用防抖来节约请求资源。
window触发resize的时候，不断的调整浏览器窗口大小会不断的触发这个事件，用防抖来让其只触发一次</div><div class="notion-text notion-block-e181081f899a4347a1ad815a9f89d004">节流：</div><div class="notion-text notion-block-8f05f116ab0242b8bbfb5b36b77c9c20">鼠标不断点击触发，mousedown(单位时间内只触发一次)
监听滚动事件，比如是否滑到底部自动加载更多，用throttle来判断</div><div class="notion-blank notion-block-aa1df0176fa249e4bd058bdac38acfec"> </div><div class="notion-callout notion-gray_background_co notion-block-82e638e2bc3b4137b8a1eb48956c6a34"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">有关Notion安装或者使用上的问题，欢迎您在底部评论区留言，一起交流~</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[栈内存堆内存和预处理]]></title>
            <link>https://blog.jddfe.com/article/e435372d-1c88-4826-9df4-5fb9be4d303f</link>
            <guid>https://blog.jddfe.com/article/e435372d-1c88-4826-9df4-5fb9be4d303f</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[栈内存与另一个概念息息相关——作用域，即代码的执行环境。上图中左边的栈内存就是全局作用域，而右边的则是局部作用域。全局作用域在浏览器窗口关闭之后才销毁。局部作用域在执行完之后就会销毁。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-e435372d1c8848269df45fb9be4d303f"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-e160d8b2221c449d830c0ffaf6bb791a">浏览器是如何运行javascript代码的？<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://segmentfault.com/a/1190000020438413">JavaScript 是如何运行的？</a></div><div class="notion-text notion-block-3969ab468b5741ccb94cbdd3732674a5">看例1：</div><div class="notion-text notion-block-b1972cc242894336a25af47761eb7c7d">用图解释这一行代码是如何执行的。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-02db699a75fe436fa302bead27f7b305"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/49976/T161637.png?t=02db699a-75fe-436f-a302-bead27f7b305" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-e82689cc37c9450fbde9095e2dfdaf0f">这是一个简单的图示，现在我们来增加几个概念：栈内存、堆内存和预处理。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-3c8587f067104884864f49cda22df014" data-id="3c8587f067104884864f49cda22df014"><span><div id="3c8587f067104884864f49cda22df014" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3c8587f067104884864f49cda22df014" title="栈内存"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>栈内存</b></span></span></h3><div class="notion-text notion-block-068ae353a03948338ff1788256cee66a">栈内存用来存放基本数据类型(Number、String、Boolean、Null和Undefined)，<b>在执行完之后销毁。</b></div><div class="notion-text notion-block-149901754d5740af89e515d980f72994">栈内存与另一个概念息息相关——作用域，即代码的执行环境。上图中左边的栈内存就是全局作用域，而右边的则是局部作用域。全局作用域在浏览器窗口关闭之后才销毁。局部作用域在执行完之后就会销毁。</div><div class="notion-text notion-block-2994b9d1f2a44ed9808d35202a4964eb">javascript规定，父作用域不能使用子作用域中变量和方程，而反过来是可以的。这个反过来的方向链条则被称为作用域链。</div><div class="notion-text notion-block-9c83c9c9ba30460a9b956474df034e2f">这里需要注意的是，<b>判断子作用域的父作用域是哪一个，要看这个子作用域是在哪里定义的，而不是在哪里执行。</b></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-d7cb57069dac46789fe8695293433a21" data-id="d7cb57069dac46789fe8695293433a21"><span><div id="d7cb57069dac46789fe8695293433a21" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d7cb57069dac46789fe8695293433a21" title="堆内存"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>堆内存</b></span></span></h3><div class="notion-text notion-block-1836631136d94c37b28a6e6a14675d56">堆内存用来存放引用数据类型(object、array、function、date)，<b>在没有被引用之后销毁。</b></div><div class="notion-text notion-block-0b6cbecf136348b780b4736ae8b0e910">当我们声明和定义了一个引用数据类型之后，这个对象保存在堆内存中，而这个对象的地址则保存在栈内存中以用于引用。</div><div class="notion-text notion-block-fa9be4b8aa5d4c78bb7e65de0ee49de7">在全局作用域声明和定义的引用数据类型，销毁的方法是手动赋值null。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-eb7ae3382e7f4d148fa2a95a5079535a" data-id="eb7ae3382e7f4d148fa2a95a5079535a"><span><div id="eb7ae3382e7f4d148fa2a95a5079535a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#eb7ae3382e7f4d148fa2a95a5079535a" title="看一组例子来说明栈内存与堆内存的区别："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>看一组例子来说明栈内存与堆内存的区别：</b></span></span></h3><div class="notion-text notion-block-970d47c2c3a24ea2a215cff176357c2f">例2</div><div class="notion-text notion-block-d8b87fa38c6a4af9875faacc55844909">例3</div><div class="notion-text notion-block-ea0d182554484754bfdf87756838aa00">例2的图解</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-8e202face024469e8fe638b29e752eac"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/49976/T161737.png?t=8e202fac-e024-469e-8fe6-38b29e752eac" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-5477dcdf4e334ea88563f75f10518210">例3的图解</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-32d9aa1f7afe42fab97e026a53e454b5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/49976/T161816.png?t=32d9aa1f-7afe-42fa-b97e-026a53e454b5" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2764231701c1472dab35af10388cbba8">由上两个图解可见，当基本数据类型传递的时候，其实是复制了一个新的数据给另一个变量；而当引用类型传递的时候，复制的仅仅是引用数据类型的地址，两个变量通过地址指向的是同一个堆内存中的数据。</div><div class="notion-text notion-block-ed76462c04af492098ab23cac6ac1b45">所以在例3中，当我们改变n.a的时候，m.a也同样改变了。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-cd474309aea94152bf09e85d445547cd" data-id="cd474309aea94152bf09e85d445547cd"><span><div id="cd474309aea94152bf09e85d445547cd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#cd474309aea94152bf09e85d445547cd" title="预处理"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>预处理</b></span></span></h3><div class="notion-text notion-block-5f935cb9d3704ed9a45947cc1849511d">预处理是浏览器在执行代码前要做的任务，它包括变量的声明和函数声明与定义。</div><div class="notion-text notion-block-42dc3675b2db4d56a1fda39cba5d1876">预处理是<b>变量提升</b>的原因。</div><div class="notion-text notion-block-1f08463b80e34f7fb3fc2c126e532579">当我们写了<code class="notion-inline-code">var num = 12</code>这样的一行代码的时候，在执行时其实是分为两步：声明<code class="notion-inline-code">var num</code>和定义<code class="notion-inline-code">num = 12</code>。对于变量，预处理只做声明而不做定义。</div><div class="notion-text notion-block-8bbe876e70e349f7b5a140bff235e292">而相对于函数<code class="notion-inline-code">function fn(){var num 12}</code>，同样有声明和定义之分，与变量不同的是，预处理时声明和定义全部执行。具体步骤是：声明<code class="notion-inline-code">function fn()</code>，定义<code class="notion-inline-code">fn() = &quot;{var num = 12}&quot;</code>。</div><div class="notion-text notion-block-e112505b14a34ec297ef38d10bd73d32">理解了栈内存、堆内存和预处理之后，重新画出例1的图示：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5d4a46fc1ac84368ada206f158c78ff8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/49976/T161853.png?t=5d4a46fc-1ac8-4368-ada2-06f158c78ff8" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-31144a9159904cbd865232ae043392d6">这里的堆内存xxxfff000被全局作用域的函数fn引用，而全局作用域只有在浏览器窗口关闭的时候才会销毁，所以，只要浏览器窗口没有关闭，则堆内存xxxfff000一直被引用而不会销毁。</div><div class="notion-text notion-block-2730f232c9cb4e238ca310aeb114f725">参考资料：</div><div class="notion-text notion-block-ec39b3c2b78f444c87d5915161abb17f">javascript高级程序设计(第三版)；</div><div class="notion-callout notion-gray_background_co notion-block-3085299cd3674229a44cae294999aa7f"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">有关Notion安装或者使用上的问题，欢迎您在底部评论区留言，一起交流~</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[闭包为什么会占用内存]]></title>
            <link>https://blog.jddfe.com/article/12cdd386-aaae-4e1d-82a5-301316d964be</link>
            <guid>https://blog.jddfe.com/article/12cdd386-aaae-4e1d-82a5-301316d964be</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[在试图弄清这个问题之前，先要理解栈内存堆内存和预处理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-12cdd386aaae4e1d82a5301316d964be"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-blank notion-block-a944209f47c34621b0e3220ecfcd040b"> </div><div class="notion-text notion-block-f7b379c89c8048d583b3ed2ed0f41738">在试图弄清这个问题之前，先要理解<a class="notion-link" href="/e435372d1c8848269df45fb9be4d303f">栈内存堆内存和预处理</a></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-d19b7695ebbf48ff859b638e6f29de0c" data-id="d19b7695ebbf48ff859b638e6f29de0c"><span><div id="d19b7695ebbf48ff859b638e6f29de0c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d19b7695ebbf48ff859b638e6f29de0c" title="占用内存，不会销毁的闭包实例"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>占用内存，不会销毁的闭包实例</b></span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-b638eef76b064341bd74dcc34d7148d0" data-id="b638eef76b064341bd74dcc34d7148d0"><span><div id="b638eef76b064341bd74dcc34d7148d0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b638eef76b064341bd74dcc34d7148d0" title="例1："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>例1：</b></span></span></h4><div class="notion-text notion-block-b6788aee40b745ce92869f2900b95e44">例1的图示</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d77477fc3b284813ba9d4afb23be0cde"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/28448/T162925.png?t=d77477fc-3b28-4813-ba9d-4afb23be0cde" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-bf6374c44acf42cc881935661cec1100"><b>未被占用的堆内存才会被销毁</b></div><div class="notion-text notion-block-935ec09793154f029f490642bdaff13a">所以，正如图中椭圆形关键点中说明的那样，堆内存xxxfff111被返回给了全局变量f，而全局变量只有在窗口关闭的时候才会销毁，<b>因此堆内存xxxfff111将一直被占用而不会销毁</b>，定义它的局部作用域A也不会被销毁。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-2e3445edf2e446d88e69bf69f4f74d71" data-id="2e3445edf2e446d88e69bf69f4f74d71"><span><div id="2e3445edf2e446d88e69bf69f4f74d71" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2e3445edf2e446d88e69bf69f4f74d71" title="例2"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>例2</b></span></span></h4><div class="notion-text notion-block-4894972e5d2d4d89b60e9159ad7b513b">这段代码的特点是：私有作用域给dom元素的事件绑定一个方法。</div><div class="notion-text notion-block-e7b53f1c0f6442d4ae0ca60cf03c4374">例2的图示：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-06e0ec7e6e9840adae64afaaa26307cc"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/28448/T163019.png?t=06e0ec7e-6e98-40ad-ae64-afaaa26307cc" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-371622127aa64f19a0042d9d887ab4d4">正如图中椭圆形关键点所说，标签对象的属性里面会自带一个onclick的属性，未被赋值时其值为null。那么，在自执行函数执行的时候，其创建的作用域所占用的堆内存xxxfff111同样也会被全局的堆内存xxxfff000占用（这里要注意，是堆内存占用堆内存），所以堆内存xxxfff111和栈内存A都不会被销毁。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-e691388cac1244388f813d2fc1a1dcc8" data-id="e691388cac1244388f813d2fc1a1dcc8"><span><div id="e691388cac1244388f813d2fc1a1dcc8" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e691388cac1244388f813d2fc1a1dcc8" title="不占用内存，立即销毁的实例"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>不占用内存，立即销毁的实例</b></span></span></h3><div class="notion-text notion-block-af0090114b6a4ed28dee7d304283a3cf">只需要将例1稍作修改。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-3cd0af258ca54bcdae2f461b4a5e9452" data-id="3cd0af258ca54bcdae2f461b4a5e9452"><span><div id="3cd0af258ca54bcdae2f461b4a5e9452" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3cd0af258ca54bcdae2f461b4a5e9452" title="例3："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>例3：</b></span></span></h4><div class="notion-text notion-block-0f95f128229a408485d049dc44f340b9">例3的图示</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5f2c64a903d249d49ae793d245004034"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/28448/T163106.png?t=5f2c64a9-03d2-49d4-9ae7-93d245004034" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-b6bfcaea3c0d4ffd88444fe8d873b9ea">由于在函数fn中，xxxfff111是被return的，所以栈内存A的预解释不会处理xxxfff111，它只在fn函数执行的时候才会生成，而函数fn的栈内存A每次被执行之后都会被销毁。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-75500d08b47c4f44ac1da99a6e70b642" data-id="75500d08b47c4f44ac1da99a6e70b642"><span><div id="75500d08b47c4f44ac1da99a6e70b642" class="notion-header-anchor"></div><a class="notion-hash-link" href="#75500d08b47c4f44ac1da99a6e70b642" title="暂时占用内存，延时销毁的闭包实例"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>暂时占用内存，延时销毁的闭包实例</b></span></span></h3><div class="notion-text notion-block-3d2d1c8fb14d4ba688f2502f51c831a4">将例3稍作修改，就变成了延时销毁的闭包实例。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-ef4463376ad7451f83940d17d9d9298c" data-id="ef4463376ad7451f83940d17d9d9298c"><span><div id="ef4463376ad7451f83940d17d9d9298c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ef4463376ad7451f83940d17d9d9298c" title="例4："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>例4：</b></span></span></h4><div class="notion-text notion-block-33664810291a4d6096d763af56389aac">例4的图示：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5d4b10efdc3a4bfb82a45d22a200f7e6"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img src="https://blog.jddfe.com/posts/28448/T163156.png?t=5d4b10ef-dc3a-4bfb-82a4-5d22a200f7e6" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d16577bb49e04c29b6680977402e08a4">正如途中椭圆形关键点处所说，<code class="notion-inline-code">fn()()</code>的意思是在执行完<code class="notion-inline-code">fn()</code>之后再把返回的值函数执行一遍。因此在子函数执行的时候，堆内存xxxfff111被占用了，相应的栈内存A也将保留。</div><div class="notion-text notion-block-606d64da80b04118857175ebc0cadfa8">可堆内存xxxfff111中保存的子函数在执行完成之后还是会被销毁，接着堆内存xxxfff111就作为未被占用的堆内存而被销毁，最终栈内存A也会被销毁。</div><div class="notion-text notion-block-83a33abb14b64407a226acea4a376992">所以，栈内存在执行完之后会被保留一段时间，这段时间等于其子函数执行的时间。</div><div class="notion-text notion-block-827ed5e3c3d943d2b6085c2cdd2e158a">参考资料：</div><div class="notion-text notion-block-d75a7f75d76c400490a3550add9aa888">javascript高级程序设计(第三版)。</div><div class="notion-callout notion-gray_background_co notion-block-6c68847df89846c28d0434938890c6a1"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">有关Notion安装或者使用上的问题，欢迎您在底部评论区留言，一起交流~</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JS 中的事件绑定、事件监听、事件委托]]></title>
            <link>https://blog.jddfe.com/article/8717153d-a3a9-47b9-a4af-8991068737bd</link>
            <guid>https://blog.jddfe.com/article/8717153d-a3a9-47b9-a4af-8991068737bd</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-8717153da3a947b9a4af8991068737bd"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-b078b9e89548423ab4d9057b456d5e1d" data-id="b078b9e89548423ab4d9057b456d5e1d"><span><div id="b078b9e89548423ab4d9057b456d5e1d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b078b9e89548423ab4d9057b456d5e1d" title="事件绑定"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">事件绑定</span></span></h4><ul class="notion-list notion-list-disc notion-block-3a403b45b39c426aa025a2d687caccbc"><li>要想让 <code class="notion-inline-code">javascript </code>对用户的操作作出响应，首先要对 <code class="notion-inline-code">dom</code> 元素绑定事件处理函数。所谓事件处理函数，就是处理用户操作的函数，不同的操作对应不同的名称</li></ul><div class="notion-text notion-block-a2f66368c30f404a97498b0f16fc4852">&lt;!--more--&gt;</div><ul class="notion-list notion-list-disc notion-block-83420ed5353143b3ba7b6270a89a39d5"><li>在<code class="notion-inline-code">javascript</code>中，有三种常用的绑定事件的方法</li><ul class="notion-list notion-list-disc notion-block-83420ed5353143b3ba7b6270a89a39d5"><li>在<code class="notion-inline-code">dom</code>元素中直接绑定；</li><li>在<code class="notion-inline-code">javascript</code>代码中绑定；</li><li>绑定事件监听函数</li></ul></ul><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-eba8174fcf23494d98c0acd08148a69b" data-id="eba8174fcf23494d98c0acd08148a69b"><span><div id="eba8174fcf23494d98c0acd08148a69b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#eba8174fcf23494d98c0acd08148a69b" title="在dom中直接绑定事件"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">在<code class="notion-inline-code">dom</code>中直接绑定事件</span></span></h4><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-d3a0b5231f4c4d8781a995de36e9d924" data-id="d3a0b5231f4c4d8781a995de36e9d924"><span><div id="d3a0b5231f4c4d8781a995de36e9d924" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d3a0b5231f4c4d8781a995de36e9d924" title="在javascript代码中绑定事件"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">在<code class="notion-inline-code">javascript</code>代码中绑定事件</span></span></h4><ul class="notion-list notion-list-disc notion-block-93bffd174a474fc79edabee7af39658b"><li>在<code class="notion-inline-code">javascript</code>代码中（即script标签内）绑定事件可以使<code class="notion-inline-code">javascript</code>代码与<code class="notion-inline-code">HTML</code>标签分离，文档结构清晰，便于管理和开发</li></ul><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-0eadb137c9cd4ff781b86a25b66af7b8" data-id="0eadb137c9cd4ff781b86a25b66af7b8"><span><div id="0eadb137c9cd4ff781b86a25b66af7b8" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0eadb137c9cd4ff781b86a25b66af7b8" title="使用事件监听绑定事件"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">使用事件监听绑定事件</span></span></h4><ul class="notion-list notion-list-disc notion-block-8aa752fbe4e746e591dad2508ad8c60d"><li>关于事件监听，W3C规范中定义了3个事件阶段，依次是捕获阶段、目标阶段、冒泡阶段</li></ul><ul class="notion-list notion-list-disc notion-block-aa4c9459e51d4b22aab45305a50a4ff5"><li>起初<code class="notion-inline-code">Netscape</code>制定了<code class="notion-inline-code">javascript</code>的一套事件驱动机制（即事件捕获）。随即<code class="notion-inline-code">IE</code>也推出了自己的一套事件驱动机制（即事件冒泡）。最后<code class="notion-inline-code">W3C</code>规范了两种事件机制，分为捕获阶段、目标阶段、冒泡阶段。IE8以前IE一直坚持自己的事件机制（前端人员一直头痛的兼容性问题），<code class="notion-inline-code">IE9</code>以后<code class="notion-inline-code">IE</code>也支持了W3C规范</li></ul><div class="notion-text notion-block-45ea2119fa7245f0901176056c1f277b"><b>W3C规范</b></div><ul class="notion-list notion-list-disc notion-block-5cf98f3afd614b73a33162cf36b7beed"><li>语法</li></ul><ul class="notion-list notion-list-disc notion-block-e7d8e5bac50841738ddeec2516dcad76"><li><code class="notion-inline-code">event</code> : （必需）事件名，支持所有<code class="notion-inline-code">dom</code>事件。</li></ul><ul class="notion-list notion-list-disc notion-block-7556349abdad42608aa9a254d7bdd49c"><li><code class="notion-inline-code">function</code>：（必需）指定要事件触发时执行的函数。</li></ul><ul class="notion-list notion-list-disc notion-block-ff4bc63176164b8e9d9470bf3ed7d132"><li><code class="notion-inline-code">useCapture</code>：（可选）指定事件是否在捕获或冒泡阶段执行。<code class="notion-inline-code">true</code>，捕获。<code class="notion-inline-code">false</code>，冒泡。默认<code class="notion-inline-code">false</code></li></ul><ul class="notion-list notion-list-disc notion-block-49a1240e4f1a49c8b16f693933577e4b"><li>注：<code class="notion-inline-code"> IE8</code> 以下不支持</li></ul><div class="notion-text notion-block-4dcabaaa40304219bde964c9eb4d22ea"><b>IE标准</b></div><ul class="notion-list notion-list-disc notion-block-71a43e136a194e439b1ec5716ab78ec4"><li>语法：</li></ul><ul class="notion-list notion-list-disc notion-block-53a2545c82064871975f7e26b6b07ef2"><li><code class="notion-inline-code">event</code>：（必需）事件类型。需加“on“，例如：<code class="notion-inline-code">onclick</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-975020caccb84652b9eaad7ce051e1a3"><li><code class="notion-inline-code">function</code>：（必需）指定要事件触发时执行的函数</li></ul><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-e07ae1da60494a42be8572c8153c115c" data-id="e07ae1da60494a42be8572c8153c115c"><span><div id="e07ae1da60494a42be8572c8153c115c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e07ae1da60494a42be8572c8153c115c" title="事件监听的优点"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">事件监听的优点</span></span></h4><ul class="notion-list notion-list-disc notion-block-7cb3ffa635f14386bc669830a6940269"><li>可以绑定多个事件</li></ul><div class="notion-text notion-block-3be4cc6b756143f48ed8ad9673138a57">常规的事件绑定只执行最后绑定的事件</div><div class="notion-text notion-block-b13c078c5b4844e2a0bcd908c3786174">两个事件都执行了</div><ul class="notion-list notion-list-disc notion-block-e6d34c589f2d49b9a0460d6c0e23eed4"><li>可以解除相应的绑定</li></ul><ul class="notion-list notion-list-disc notion-block-1c3b35497e95448095200327785966e1"><li>封装事件监听</li></ul><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-fdda1ba8c31644719868686ea9d32644" data-id="fdda1ba8c31644719868686ea9d32644"><span><div id="fdda1ba8c31644719868686ea9d32644" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fdda1ba8c31644719868686ea9d32644" title="事件委托"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">事件委托</span></span></h4><ul class="notion-list notion-list-disc notion-block-e489caabb0f64db8ab317e6435f2c61e"><li>事件委托就是利用冒泡的原理，把事件加到父元素或祖先元素上，触发执行效果</li></ul><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-912d77da58af4b4da42b509af3b25665" data-id="912d77da58af4b4da42b509af3b25665"><span><div id="912d77da58af4b4da42b509af3b25665" class="notion-header-anchor"></div><a class="notion-hash-link" href="#912d77da58af4b4da42b509af3b25665" title="事件委托优点"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">事件委托优点</span></span></h4><ul class="notion-list notion-list-disc notion-block-49ec3d0c8a5340dc8e7cc4ca36cc3c9f"><li>提高javascript性能。事件委托可以显著的提高事件的处理速度，减少内存的占用</li></ul><ul class="notion-list notion-list-disc notion-block-235c64a586124fad81555bd604dafca9"><li>传统写法</li></ul><ul class="notion-list notion-list-disc notion-block-d5c68978f3e54df88161a1bedf82683b"><li>事件委托</li></ul><ul class="notion-list notion-list-disc notion-block-f92090e0c56e4ff4aae4c0735c8e4ddd"><li>动态的添加dom元素，不需要因为元素的改动而修改事件绑定</li></ul><ul class="notion-list notion-list-disc notion-block-65ea6f03acf44e669ebf1e4378572856"><li>传统写法</li></ul><ul class="notion-list notion-list-disc notion-block-21a0624b0768463fa791f96acaddf826"><li>点击item1到item3都有事件响应，但是点击item4时，没有事件响应。说明传统的事件绑定无法对动态添加的元素而动态的添加事件。</li></ul><ul class="notion-list notion-list-disc notion-block-985435a833b44c60ac5054be95d74d0f"><li>事件委托</li></ul><ul class="notion-list notion-list-disc notion-block-14265a5fd7634487bc0b19eddf8d6ff8"><li>当点击item4时，item4有事件响应。说明事件委托可以为新添加的dom元素动态的添加事件</li></ul><div class="notion-callout notion-gray_background_co notion-block-cbfd2f5fa2584f018db38888555b486e"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">有关Notion安装或者使用上的问题，欢迎您在底部评论区留言，一起交流~</div></div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>