From e56577aed077f8511d3dc44738ae437bbc3831c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 13 Nov 2023 15:18:32 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Huai-Gu/?= =?UTF-8?q?HuaiGu@c771d13dc3da2d09511aa16255e0e1461415ae31=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 6 +- JS.TS/ES6/Iterator.html | 10 +-- JS.TS/ES6/Symbol.html | 10 +-- JS.TS/ES6/index.html | 10 +-- JS.TS/ES6/promise.html | 10 +-- ...\346\236\204\350\265\213\345\200\274.html" | 10 +-- ...\350\277\220\347\256\227\347\254\246.html" | 10 +-- ...\346\211\247\350\241\214\346\240\210.html" | 10 +-- JS.TS/TS/is.html | 10 +-- "JS.TS/TS/\347\264\242\345\274\225.html" | 10 +-- .../\345\237\272\347\241\200/Eventloop.html" | 10 +-- ...55\347\232\204map\345\222\214weakMap.html" | 10 +-- ...\346\223\215\344\275\234\347\254\246.html" | 10 +-- ...6\207\202map\345\207\275\346\225\260.html" | 10 +-- ...\345\234\276\345\233\236\346\224\266.html" | 10 +-- ...\351\230\205\346\250\241\345\274\217.html" | 10 +-- React/ReactHooks/useCallback.html | 10 +-- React/ReactHooks/useContext.html | 10 +-- React/ReactHooks/useEffect.html | 10 +-- React/ReactHooks/useRef.html | 10 +-- React/ReactHooks/useState.html | 10 +-- React/index.html | 10 +-- React/redux.html | 10 +-- Vue/CSS/scroll.html | 10 +-- ...\270\216diff\347\256\227\346\263\225.html" | 10 +-- .../Api-attrs.html" | 10 +-- .../Api-parent.html" | 10 +-- .../Api-props.html" | 10 +-- .../Api-provide.html" | 10 +-- ...e.js => JS.TS_ES6_Iterator.md.f3fca7d1.js} | 2 +- ...=> JS.TS_ES6_Iterator.md.f3fca7d1.lean.js} | 2 +- ...370.js => JS.TS_ES6_Symbol.md.50dec9c7.js} | 2 +- ...s => JS.TS_ES6_Symbol.md.50dec9c7.lean.js} | 2 +- ...2092.js => JS.TS_ES6_index.md.691bf43d.js} | 2 +- ...js => JS.TS_ES6_index.md.691bf43d.lean.js} | 2 +- ...0c.js => JS.TS_ES6_promise.md.ce64363c.js} | 2 +- ... => JS.TS_ES6_promise.md.ce64363c.lean.js} | 2 +- ...04\350\265\213\345\200\274.md.31960747.js" | 2 +- ...0\265\213\345\200\274.md.31960747.lean.js" | 2 +- ...20\347\256\227\347\254\246.md.6a0dea18.js" | 2 +- ...7\256\227\347\254\246.md.6a0dea18.lean.js" | 2 +- ...47\350\241\214\346\240\210.md.401ce3f9.js" | 2 +- ...0\241\214\346\240\210.md.401ce3f9.lean.js" | 2 +- ...454e2256.js => JS.TS_TS_is.md.3088178b.js} | 2 +- ...ean.js => JS.TS_TS_is.md.3088178b.lean.js} | 2 +- ...S_\347\264\242\345\274\225.md.6a7434e5.js" | 2 +- ...7\264\242\345\274\225.md.6a7434e5.lean.js" | 2 +- ...\272\347\241\200_Eventloop.md.5f45abd4.js" | 2 +- ...347\241\200_Eventloop.md.5f45abd4.lean.js" | 2 +- ...\204map\345\222\214weakMap.md.bed29ac7.js" | 2 +- ...ap\345\222\214weakMap.md.bed29ac7.lean.js" | 2 +- ...15\344\275\234\347\254\246.md.c29bc184.js" | 2 +- ...4\275\234\347\254\246.md.c29bc184.lean.js" | 2 +- ...ap\345\207\275\346\225\260.md.2eb385c8.js" | 2 +- ...5\207\275\346\225\260.md.2eb385c8.lean.js" | 2 +- ...76\345\233\236\346\224\266.md.87bf0130.js" | 2 +- ...5\233\236\346\224\266.md.87bf0130.lean.js" | 2 +- ...05\346\250\241\345\274\217.md.47d4ba6b.js" | 2 +- ...6\250\241\345\274\217.md.47d4ba6b.lean.js" | 2 +- ...act_ReactHooks_useCallback.md.d5247b8b.js} | 2 +- ...eactHooks_useCallback.md.d5247b8b.lean.js} | 2 +- ...eact_ReactHooks_useContext.md.df92c0c5.js} | 2 +- ...ReactHooks_useContext.md.df92c0c5.lean.js} | 2 +- ...React_ReactHooks_useEffect.md.7227bbed.js} | 2 +- ..._ReactHooks_useEffect.md.7227bbed.lean.js} | 2 +- ...=> React_ReactHooks_useRef.md.ad056e1f.js} | 2 +- ...act_ReactHooks_useRef.md.ad056e1f.lean.js} | 2 +- ... React_ReactHooks_useState.md.ed1ad237.js} | 2 +- ...t_ReactHooks_useState.md.ed1ad237.lean.js} | 2 +- ...1ce8f0d9.js => React_index.md.aef465cd.js} | 2 +- ...ean.js => React_index.md.aef465cd.lean.js} | 2 +- ...a7cc0ec6.js => React_redux.md.786f58cd.js} | 2 +- ...ean.js => React_redux.md.786f58cd.lean.js} | 2 +- ...76bcb.js => Vue_CSS_scroll.md.1ed7720c.js} | 2 +- ....js => Vue_CSS_scroll.md.1ed7720c.lean.js} | 2 +- ...ff\347\256\227\346\263\225.md.45840d87.js" | 2 +- ...7\256\227\346\263\225.md.45840d87.lean.js" | 2 +- ...\232\344\277\241_Api-attrs.md.f1a7c08c.js" | 2 +- ...344\277\241_Api-attrs.md.f1a7c08c.lean.js" | 2 +- ...232\344\277\241_Api-parent.md.1745ecf3.js" | 2 +- ...44\277\241_Api-parent.md.1745ecf3.lean.js" | 2 +- ...\232\344\277\241_Api-props.md.ae661645.js" | 2 +- ...344\277\241_Api-props.md.ae661645.lean.js" | 2 +- ...32\344\277\241_Api-provide.md.687988b1.js" | 2 +- ...4\277\241_Api-provide.md.687988b1.lean.js" | 2 +- assets/{app.3e0f3fbc.js => app.ec03d301.js} | 2 +- ...ex.md.9a7f58ba.js => index.md.624b3696.js} | 2 +- ...58ba.lean.js => index.md.624b3696.lean.js} | 2 +- ...a1bfd0.js => tips_2023.3.5.md.2dbdb9f3.js} | 2 +- ...n.js => tips_2023.3.5.md.2dbdb9f3.lean.js} | 2 +- ...pr\346\217\222\344\273\266.md.03ac7388.js" | 2 +- ...6\217\222\344\273\266.md.03ac7388.lean.js" | 2 +- ...\347\273\223_canvas_canvas.md.ebb83c7c.js" | 2 +- ...273\223_canvas_canvas.md.ebb83c7c.lean.js" | 2 +- ...\347\273\223_github-deploy.md.370d6a40.js" | 2 +- ...273\223_github-deploy.md.370d6a40.lean.js" | 2 +- ...\223_v-for\345\222\214v-if.md.0993cf0a.js" | 2 +- ...v-for\345\222\214v-if.md.0993cf0a.lean.js" | 2 +- ...47\232\204\345\272\223_css.md.c1c80c14.js" | 2 +- ...2\204\345\272\223_css.md.c1c80c14.lean.js" | 2 +- ...17\351\201\215\345\216\206.md.ee74ccc4.js" | 2 +- ...1\201\215\345\216\206.md.ee74ccc4.lean.js" | 2 +- ...24\350\257\225\351\242\230.md.475ddde7.js" | 2 +- ...0\257\225\351\242\230.md.475ddde7.lean.js" | 2 +- ....7\345\255\227\350\212\202.md.8afed0a6.js" | 2 +- ...5\255\227\350\212\202.md.8afed0a6.lean.js" | 2 +- ...5\237\272\347\241\200_HTTP.md.b7c09e53.js" | 2 +- ...\272\347\241\200_HTTP.md.b7c09e53.lean.js" | 2 +- ...it\350\247\204\350\214\203.md.6639eca7.js" | 2 +- ...0\247\204\350\214\203.md.6639eca7.lean.js" | 2 +- ...sh\345\257\206\351\222\245.md.d3256fac.js" | 2 +- ...5\257\206\351\222\245.md.d3256fac.lean.js" | 2 +- ...\272\347\241\200_git_index.md.b79aa9c1.js" | 2 +- ...347\241\200_git_index.md.b79aa9c1.lean.js" | 2 +- ...7\272\347\241\200_git_tips.md.8d63ed5a.js" | 2 +- ...\347\241\200_git_tips.md.8d63ed5a.lean.js" | 2 +- ...5\221\275\344\273\244_init.md.6f76688d.js" | 2 +- ...\275\344\273\244_init.md.6f76688d.lean.js" | 2 +- ...\221\275\344\273\244_merge.md.d452a38c.js" | 2 +- ...275\344\273\244_merge.md.d452a38c.lean.js" | 2 +- ...4_\345\270\270\347\224\250.md.3e6fcac7.js" | 2 +- ...5\270\270\347\224\250.md.3e6fcac7.lean.js" | 2 +- ...0_\345\217\221\347\211\210.md.a000055b.js" | 2 +- ...5\217\221\347\211\210.md.a000055b.lean.js" | 2 +- ...60\345\212\237\350\203\275.md.f6f93872.js" | 2 +- ...5\212\237\350\203\275.md.f6f93872.lean.js" | 2 +- ...347\264\247\346\200\245bug.md.60e046a3.js" | 2 +- ...64\247\346\200\245bug.md.60e046a3.lean.js" | 2 +- ...\237\272\347\241\200_index.md.c01f4f9b.js" | 2 +- ...272\347\241\200_index.md.c01f4f9b.lean.js" | 2 +- ...1\215\347\253\257_HTML_CSS.md.54b3e357.js" | 2 +- ...\347\253\257_HTML_CSS.md.54b3e357.lean.js" | 2 +- ...14\351\227\255\345\214\205.md.b41c716d.js" | 2 +- ...1\227\255\345\214\205.md.b41c716d.lean.js" | 2 +- ...37\345\236\213\351\223\276.md.26402d30.js" | 2 +- ...5\236\213\351\223\276.md.26402d30.lean.js" | 2 +- ...14\350\256\241\347\256\227.md.23efe413.js" | 2 +- ...0\256\241\347\256\227.md.23efe413.lean.js" | 2 +- ...0_\345\274\202\346\255\245.md.1f21a706.js" | 2 +- ...5\274\202\346\255\245.md.1f21a706.lean.js" | 2 +- ...241\200_DOM\345\222\214BOM.md.08038994.js" | 2 +- ...00_DOM\345\222\214BOM.md.08038994.lean.js" | 2 +- ...60\345\216\237\347\220\206.md.34fe56c4.js" | 2 +- ...5\216\237\347\220\206.md.34fe56c4.lean.js" | 2 +- ...46\211\213\345\206\231call.md.e99ab99f.js" | 55 +++++++++++++ ...1\213\345\206\231call.md.e99ab99f.lean.js" | 1 + ...37\346\226\271\346\263\225.md.a422a38c.js" | 2 +- ...6\226\271\346\263\225.md.a422a38c.lean.js" | 2 +- ...50\351\227\256\351\242\230.md.11bafd55.js" | 2 +- ...1\227\256\351\242\230.md.11bafd55.lean.js" | 2 +- ...30\345\205\210\347\272\247.md.58b8cfa0.js" | 2 +- ...5\205\210\347\272\247.md.58b8cfa0.lean.js" | 2 +- ...15\347\253\257_flexandgrid.md.3e6bf786.js" | 2 +- ...7\253\257_flexandgrid.md.3e6bf786.lean.js" | 2 +- ...2_\346\200\273\347\253\240.md.95b7b1b3.js" | 2 +- ...6\200\273\347\253\240.md.95b7b1b3.lean.js" | 2 +- ...66\345\276\252\347\216\257.md.917a96e7.js" | 2 +- ...5\276\252\347\216\257.md.917a96e7.lean.js" | 2 +- ...66\346\234\272\345\210\266.md.d5f3c76e.js" | 2 +- ...6\234\272\345\210\266.md.d5f3c76e.lean.js" | 2 +- ...57\345\255\230\345\202\250.md.35f488d1.js" | 2 +- ...5\255\230\345\202\250.md.35f488d1.lean.js" | 2 +- ...7_\350\267\250\345\237\237.md.255c97e5.js" | 2 +- ...0\267\250\345\237\237.md.255c97e5.lean.js" | 2 +- hashmap.json | 2 +- index.html | 8 +- tips/2023.3.5.html | 10 +-- .../Adobe-pr\346\217\222\344\273\266.html" | 10 +-- .../canvas/canvas.html" | 10 +-- .../github-deploy.html" | 10 +-- .../v-for\345\222\214v-if.html" | 10 +-- .../css.html" | 10 +-- ...\345\272\217\351\201\215\345\216\206.html" | 10 +-- ...\347\254\224\350\257\225\351\242\230.html" | 10 +-- .../1.7\345\255\227\350\212\202.html" | 10 +-- .../HTTP.html" | 10 +-- .../git/git\350\247\204\350\214\203.html" | 10 +-- ...4\270\252ssh\345\257\206\351\222\245.html" | 10 +-- .../git/index.html" | 10 +-- .../git/tips.html" | 10 +-- .../git/\345\221\275\344\273\244/init.html" | 10 +-- .../git/\345\221\275\344\273\244/merge.html" | 10 +-- .../\345\270\270\347\224\250.html" | 10 +-- .../\345\217\221\347\211\210.html" | 10 +-- ...\346\226\260\345\212\237\350\203\275.html" | 10 +-- .../\347\264\247\346\200\245bug.html" | 10 +-- .../index.html" | 10 +-- .../CZ\345\211\215\347\253\257/HTML+CSS.html" | 10 +-- ...\345\222\214\351\227\255\345\214\205.html" | 10 +-- ...\345\216\237\345\236\213\351\223\276.html" | 10 +-- ...\345\222\214\350\256\241\347\256\227.html" | 10 +-- .../\345\274\202\346\255\245.html" | 10 +-- .../DOM\345\222\214BOM.html" | 10 +-- ...\347\216\260\345\216\237\347\220\206.html" | 12 +-- .../\346\211\213\345\206\231call.html" | 81 +++++++++++++++++++ ...\347\224\237\346\226\271\346\263\225.html" | 12 +-- ...\347\224\250\351\227\256\351\242\230.html" | 10 +-- ...\344\274\230\345\205\210\347\272\247.html" | 10 +-- .../flexandgrid.html" | 10 +-- .../\346\200\273\347\253\240.html" | 10 +-- ...\344\273\266\345\276\252\347\216\257.html" | 10 +-- ...\344\273\266\346\234\272\345\210\266.html" | 10 +-- ...\347\253\257\345\255\230\345\202\250.html" | 10 +-- .../\350\267\250\345\237\237.html" | 10 +-- 204 files changed, 605 insertions(+), 468 deletions(-) rename assets/{JS.TS_ES6_Iterator.md.1c76fe5e.js => JS.TS_ES6_Iterator.md.f3fca7d1.js} (99%) rename assets/{JS.TS_ES6_Iterator.md.1c76fe5e.lean.js => JS.TS_ES6_Iterator.md.f3fca7d1.lean.js} (90%) rename assets/{JS.TS_ES6_Symbol.md.7d12d370.js => JS.TS_ES6_Symbol.md.50dec9c7.js} (98%) rename assets/{JS.TS_ES6_Symbol.md.7d12d370.lean.js => JS.TS_ES6_Symbol.md.50dec9c7.lean.js} (85%) rename assets/{JS.TS_ES6_index.md.4ce42092.js => JS.TS_ES6_index.md.691bf43d.js} (90%) rename assets/{JS.TS_ES6_index.md.4ce42092.lean.js => JS.TS_ES6_index.md.691bf43d.lean.js} (90%) rename assets/{JS.TS_ES6_promise.md.1d63510c.js => JS.TS_ES6_promise.md.ce64363c.js} (99%) rename assets/{JS.TS_ES6_promise.md.1d63510c.lean.js => JS.TS_ES6_promise.md.ce64363c.lean.js} (87%) rename "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.js" => "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.js" (98%) rename "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.lean.js" => "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.lean.js" (91%) rename "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.js" => "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.js" (79%) rename "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.lean.js" => "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.lean.js" (79%) rename "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.js" => "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.js" (98%) rename "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.lean.js" => "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.lean.js" (91%) rename assets/{JS.TS_TS_is.md.454e2256.js => JS.TS_TS_is.md.3088178b.js} (99%) rename assets/{JS.TS_TS_is.md.454e2256.lean.js => JS.TS_TS_is.md.3088178b.lean.js} (84%) rename "assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.js" => "assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.js" (99%) rename "assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.lean.js" => "assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.lean.js" (87%) rename "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.js" => "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.js" (93%) rename "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.lean.js" => "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.lean.js" (93%) rename "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.js" => "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.js" (98%) rename "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.lean.js" => "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.lean.js" (90%) rename "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.js" => "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.js" (99%) rename "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.lean.js" => "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.lean.js" (89%) rename "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.js" => "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.js" (81%) rename "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.lean.js" => "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.lean.js" (81%) rename "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.js" => "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.js" (80%) rename "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.lean.js" => "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.lean.js" (80%) rename "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.js" => "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.js" (99%) rename "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.lean.js" => "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.lean.js" (99%) rename assets/{React_ReactHooks_useCallback.md.1c584b49.js => React_ReactHooks_useCallback.md.d5247b8b.js} (94%) rename assets/{React_ReactHooks_useCallback.md.1c584b49.lean.js => React_ReactHooks_useCallback.md.d5247b8b.lean.js} (83%) rename assets/{React_ReactHooks_useContext.md.5c073e00.js => React_ReactHooks_useContext.md.df92c0c5.js} (97%) rename assets/{React_ReactHooks_useContext.md.5c073e00.lean.js => React_ReactHooks_useContext.md.df92c0c5.lean.js} (85%) rename assets/{React_ReactHooks_useEffect.md.f1bef51f.js => React_ReactHooks_useEffect.md.7227bbed.js} (89%) rename assets/{React_ReactHooks_useEffect.md.f1bef51f.lean.js => React_ReactHooks_useEffect.md.7227bbed.lean.js} (89%) rename assets/{React_ReactHooks_useRef.md.7892ba92.js => React_ReactHooks_useRef.md.ad056e1f.js} (99%) rename assets/{React_ReactHooks_useRef.md.7892ba92.lean.js => React_ReactHooks_useRef.md.ad056e1f.lean.js} (91%) rename assets/{React_ReactHooks_useState.md.1ac2cd38.js => React_ReactHooks_useState.md.ed1ad237.js} (99%) rename assets/{React_ReactHooks_useState.md.1ac2cd38.lean.js => React_ReactHooks_useState.md.ed1ad237.lean.js} (93%) rename assets/{React_index.md.1ce8f0d9.js => React_index.md.aef465cd.js} (86%) rename assets/{React_index.md.1ce8f0d9.lean.js => React_index.md.aef465cd.lean.js} (86%) rename assets/{React_redux.md.a7cc0ec6.js => React_redux.md.786f58cd.js} (78%) rename assets/{React_redux.md.a7cc0ec6.lean.js => React_redux.md.786f58cd.lean.js} (78%) rename assets/{Vue_CSS_scroll.md.42176bcb.js => Vue_CSS_scroll.md.1ed7720c.js} (91%) rename assets/{Vue_CSS_scroll.md.42176bcb.lean.js => Vue_CSS_scroll.md.1ed7720c.lean.js} (91%) rename "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.js" => "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.js" (99%) rename "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.lean.js" => "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.lean.js" (87%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.js" (99%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.lean.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.lean.js" (95%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.js" (99%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.lean.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.lean.js" (92%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.js" (99%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.lean.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.lean.js" (91%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.js" (99%) rename "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.lean.js" => "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.lean.js" (91%) rename assets/{app.3e0f3fbc.js => app.ec03d301.js} (83%) rename assets/{index.md.9a7f58ba.js => index.md.624b3696.js} (92%) rename assets/{index.md.9a7f58ba.lean.js => index.md.624b3696.lean.js} (92%) rename assets/{tips_2023.3.5.md.38a1bfd0.js => tips_2023.3.5.md.2dbdb9f3.js} (97%) rename assets/{tips_2023.3.5.md.38a1bfd0.lean.js => tips_2023.3.5.md.2dbdb9f3.lean.js} (89%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.js" (99%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.lean.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.lean.js" (93%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.js" (98%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.lean.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.lean.js" (84%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.js" (93%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.lean.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.lean.js" (84%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.js" (99%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.lean.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.lean.js" (89%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.js" (87%) rename "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.lean.js" => "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.lean.js" (87%) rename "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.js" => "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.js" (99%) rename "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.lean.js" => "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.lean.js" (93%) rename "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.js" => "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.js" (95%) rename "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.lean.js" => "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.lean.js" (93%) rename "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.js" => "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.js" (99%) rename "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.lean.js" => "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.lean.js" (84%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.js" (94%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.lean.js" (81%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.js" (99%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.lean.js" (90%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.js" (98%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.lean.js" (90%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.js" (98%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.lean.js" (91%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.js" (95%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.lean.js" (85%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.js" (99%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.lean.js" (83%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.js" (98%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.lean.js" (92%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.js" (97%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.lean.js" (86%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.js" (96%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.lean.js" (84%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.js" (98%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.lean.js" (85%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.js" (90%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.lean.js" (90%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.js" (80%) rename "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.lean.js" => "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.lean.js" (80%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.js" (99%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.lean.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.lean.js" (93%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.js" (99%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.lean.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.lean.js" (91%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.js" (99%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.lean.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.lean.js" (93%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.js" (99%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.lean.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.lean.js" (91%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.js" (99%) rename "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.lean.js" => "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.lean.js" (94%) rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.js" (99%) rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.lean.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.lean.js" (95%) rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.js" (99%) rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.lean.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.lean.js" (93%) create mode 100644 "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.js" create mode 100644 "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.lean.js" rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.js" (99%) rename "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.lean.js" => "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.lean.js" (97%) rename "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.js" => "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.js" (99%) rename "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.lean.js" => "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.lean.js" (93%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.js" (97%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.lean.js" (91%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.js" (99%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.lean.js" (92%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.js" (95%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.lean.js" (87%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.js" (98%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.lean.js" (83%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.js" (98%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.lean.js" (87%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.js" (98%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.lean.js" (91%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.js" (97%) rename "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.lean.js" => "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.lean.js" (93%) create mode 100644 "\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\211\213\345\206\231call.html" diff --git a/404.html b/404.html index e33ad29..9ef38c9 100644 --- a/404.html +++ b/404.html @@ -6,7 +6,7 @@ 404 | 怀谷 - + - + + \ No newline at end of file diff --git a/JS.TS/ES6/Iterator.html b/JS.TS/ES6/Iterator.html index 9005ea2..5b4c859 100644 --- a/JS.TS/ES6/Iterator.html +++ b/JS.TS/ES6/Iterator.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

Iterator

目的 : 为不同的数据集合提供了相同的访问机制

Q: 为哪些数据集合呢 A: Array Map Object Set

手写 Iteration

js
function myIteration(arr){
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/JS.TS/ES6/Symbol.html b/JS.TS/ES6/Symbol.html
index 8bd1256..a732c6d 100644
--- a/JS.TS/ES6/Symbol.html
+++ b/JS.TS/ES6/Symbol.html
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
Skip to content
On this page

关于Symbol

在对象上设置Symbol

  1. 使用 []

  2. 使用Object.defineProperty

js
let mySymbol = Symbol();
+    
Skip to content
On this page

关于Symbol

在对象上设置Symbol

  1. 使用 []

  2. 使用Object.defineProperty

js
let mySymbol = Symbol();
 Object.defineProperty(a, mySymbol, { value: 'Hello!' });
 

WARNING

不能使用点运算符访问

js
    Object.defineProperty(a, mySymbol, { value: 'Hello!' });
     a.mySymbol // 报错
@@ -32,8 +32,8 @@
 [...myIterable] // [1, 2, 3]
 
 
- - + + \ No newline at end of file diff --git a/JS.TS/ES6/index.html b/JS.TS/ES6/index.html index 5afb48b..f852520 100644 --- a/JS.TS/ES6/index.html +++ b/JS.TS/ES6/index.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git a/JS.TS/ES6/promise.html b/JS.TS/ES6/promise.html index b6835d0..099d4ef 100644 --- a/JS.TS/ES6/promise.html +++ b/JS.TS/ES6/promise.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

promise

Promise 构造函数需要传的参数就是一个 executor 构造器函数。executor 里需要传 resolve 和 reject 函数,用于改变 Promise 实例的状态

js
const promise = new Promise(executor)
+    
Skip to content
On this page

promise

Promise 构造函数需要传的参数就是一个 executor 构造器函数。executor 里需要传 resolve 和 reject 函数,用于改变 Promise 实例的状态

js
const promise = new Promise(executor)
 // 需要传入构造器函数
 //定义状态
 const PENDING = 'pending'
@@ -109,8 +109,8 @@
   })
 }
 
- - + + \ No newline at end of file diff --git "a/JS.TS/ES6/\350\247\243\346\236\204\350\265\213\345\200\274.html" "b/JS.TS/ES6/\350\247\243\346\236\204\350\265\213\345\200\274.html" index 0a6baef..9f026d2 100644 --- "a/JS.TS/ES6/\350\247\243\346\236\204\350\265\213\345\200\274.html" +++ "b/JS.TS/ES6/\350\247\243\346\236\204\350\265\213\345\200\274.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

js

+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/JS.TS/ES6/\350\277\220\347\256\227\347\254\246.html" "b/JS.TS/ES6/\350\277\220\347\256\227\347\254\246.html"
index b8a79aa..fea36e3 100644
--- "a/JS.TS/ES6/\350\277\220\347\256\227\347\254\246.html"
+++ "b/JS.TS/ES6/\350\277\220\347\256\227\347\254\246.html"
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
-    
-    
+    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/JS.TS/JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.html" "b/JS.TS/JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.html"
index 246f886..c605faf 100644
--- "a/JS.TS/JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.html"
+++ "b/JS.TS/JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.html"
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
Skip to content
On this page

变量提升

js
foo();  // foo2
+    
Skip to content
On this page

变量提升

js
foo();  // foo2
 var foo = function() {
     console.log('foo1');
 }
@@ -41,8 +41,8 @@
 
 // undefined {n:2}
 

连等操作符执行顺序从过至左

  1. a=

  2. 赋值给a.x 但没有该x属性,所以在原对象上加上该属性,该即b指向的对象

- - + + \ No newline at end of file diff --git a/JS.TS/TS/is.html b/JS.TS/TS/is.html index 290c5ee..b3df4fa 100644 --- a/JS.TS/TS/is.html +++ b/JS.TS/TS/is.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

ts is

ts
  _isElement(obj: any): obj is Element {
+    
Skip to content
On this page

ts is

ts
  _isElement(obj: any): obj is Element {
     return !!(obj && obj.nodeType == 1);
   }
 

今天刚看到这个ts is 不同于as 当 _isElement 返回true时 obj 被定义为Element类型

ts
const foo = (val: unknown) => isString(val) ? val.toUpperCase() : val
@@ -33,8 +33,8 @@
 // 这里我们通过泛型说明如果 isArray 返回了 true ,意味着 val 是由 string 构成的数组
 const foo = (val: unknown) => isArray<string>(val) ? val.map(item => item.toLowerCase()) : val
 
- - + + \ No newline at end of file diff --git "a/JS.TS/TS/\347\264\242\345\274\225.html" "b/JS.TS/TS/\347\264\242\345\274\225.html" index 12ddf3c..217bb7d 100644 --- "a/JS.TS/TS/\347\264\242\345\274\225.html" +++ "b/JS.TS/TS/\347\264\242\345\274\225.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

函数不能作为索引签名的问题

ts
let map: Map<string, Array<Function>> = new Map()
+    
Skip to content
On this page

函数不能作为索引签名的问题

ts
let map: Map<string, Array<Function>> = new Map()
 

用 indexOf 读取签名 并且删除不能直接赋值 null

ts
mapget(theme)[cb] = null
 

在 unsubscribe 方法中,代码 并不能正确地将回调函数从订阅列表中删除。 这是因为 ma.get(theme)[cb] 会将 cb 作为数组的下标来访问数组中的元素,但是 cb 是一个函数,无法直接作为数组下标使用。 以下是一个简单观察者模式的实现

ts
class Broker {
   private subs: Map<string, Function[]> = new Map();
@@ -69,8 +69,8 @@
 em.emit("aa"); // 只输出 "bb"
 
 
- - + + \ No newline at end of file diff --git "a/JS.TS/\345\237\272\347\241\200/Eventloop.html" "b/JS.TS/\345\237\272\347\241\200/Eventloop.html" index def016c..7d28bd8 100644 --- "a/JS.TS/\345\237\272\347\241\200/Eventloop.html" +++ "b/JS.TS/\345\237\272\347\241\200/Eventloop.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

Js 任务

MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

- - +
Skip to content
On this page

Js 任务

MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

+ + \ No newline at end of file diff --git "a/JS.TS/\345\237\272\347\241\200/Js\344\270\255\347\232\204map\345\222\214weakMap.html" "b/JS.TS/\345\237\272\347\241\200/Js\344\270\255\347\232\204map\345\222\214weakMap.html" index 52a2d2f..84bba3f 100644 --- "a/JS.TS/\345\237\272\347\241\200/Js\344\270\255\347\232\204map\345\222\214weakMap.html" +++ "b/JS.TS/\345\237\272\347\241\200/Js\344\270\255\347\232\204map\345\222\214weakMap.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

Map 构造函数

js
    const map =new Map()
+    
Skip to content
On this page

Map 构造函数

js
    const map =new Map()
     map.set("huaigu",{
         name:"tomao"
     })
@@ -34,8 +34,8 @@
 

weakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。 原始数据类型不能作为WeakMap 的key 且weakMap 所引用的对象不计入 垃圾回收

js

 
 
- - + + \ No newline at end of file diff --git "a/JS.TS/\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246.html" "b/JS.TS/\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246.html" index 2f1a338..2633e9b 100644 --- "a/JS.TS/\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246.html" +++ "b/JS.TS/\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

关于 new 操作符

js
function realnew () {
+    
Skip to content
On this page

关于 new 操作符

js
function realnew () {
   let obj = {}
   let Con = Array.prototype.shift.call(arguments)
   console.log(Con)
@@ -89,8 +89,8 @@
 
     bind的实现
 

三者第一个参数都是 this 要指向的对象,如果如果没有这个参数或参数为 undefined 或 null,则默认指向全局 window 三者都可以传参,但是 apply 是数组,而 call 是参数列表,且 apply 和 call 是一次性传入参数,而 bind 可以分为多次传入 bind 是返回绑定 this 之后的函数,apply、call 则是立即执行

- - + + \ No newline at end of file diff --git "a/JS.TS/\345\237\272\347\241\200/\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.html" "b/JS.TS/\345\237\272\347\241\200/\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.html" index 860088e..8a202a7 100644 --- "a/JS.TS/\345\237\272\347\241\200/\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.html" +++ "b/JS.TS/\345\237\272\347\241\200/\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git "a/JS.TS/\345\237\272\347\241\200/\345\236\203\345\234\276\345\233\236\346\224\266.html" "b/JS.TS/\345\237\272\347\241\200/\345\236\203\345\234\276\345\233\236\346\224\266.html" index 8e47554..1a5bc12 100644 --- "a/JS.TS/\345\237\272\347\241\200/\345\236\203\345\234\276\345\233\236\346\224\266.html" +++ "b/JS.TS/\345\237\272\347\241\200/\345\236\203\345\234\276\345\233\236\346\224\266.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git "a/JS.TS/\350\256\276\350\256\241\346\250\241\345\274\217/\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.html" "b/JS.TS/\350\256\276\350\256\241\346\250\241\345\274\217/\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.html" index 7b11b4d..98044b5 100644 --- "a/JS.TS/\350\256\276\350\256\241\346\250\241\345\274\217/\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.html" +++ "b/JS.TS/\350\256\276\350\256\241\346\250\241\345\274\217/\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
Skip to content
On this page

什么是发布订阅模式?

类似addEventListenr 发布-订阅模式里面包含了三个模块,发布者,订阅者和处理中心。这里处理中心相当于报刊办事大厅。 发布者相当与某个杂志负责人,他来中心这注册一个的杂志,而订阅者相当于用户,我在中心订阅了这分杂志。 每当发布者发布了一期杂志,办事大厅就会通知订阅者来拿新杂志。

代码实现

Talk is cheap,show you my code

ts
// 发布订阅模式
+    
Skip to content
On this page

什么是发布订阅模式?

类似addEventListenr 发布-订阅模式里面包含了三个模块,发布者,订阅者和处理中心。这里处理中心相当于报刊办事大厅。 发布者相当与某个杂志负责人,他来中心这注册一个的杂志,而订阅者相当于用户,我在中心订阅了这分杂志。 每当发布者发布了一期杂志,办事大厅就会通知订阅者来拿新杂志。

代码实现

Talk is cheap,show you my code

ts
// 发布订阅模式
 // on 监听/订阅
 // emit 执行/发布
 // once 只执行一次
@@ -118,8 +118,8 @@
 dispatch.emit('post', {type:'post'})
 dispatch.emit('post', {type:'post'})
 

执行结果如下:通过once绑定的事件,仅能触发一次

- - + + \ No newline at end of file diff --git a/React/ReactHooks/useCallback.html b/React/ReactHooks/useCallback.html index b169028..da1bc17 100644 --- a/React/ReactHooks/useCallback.html +++ b/React/ReactHooks/useCallback.html @@ -6,8 +6,8 @@ useCallback | 怀谷 - - + + -
Skip to content
On this page

useCallback

jsx

+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/React/ReactHooks/useContext.html b/React/ReactHooks/useContext.html
index fcf0e87..01a3778 100644
--- a/React/ReactHooks/useContext.html
+++ b/React/ReactHooks/useContext.html
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
Skip to content
On this page

useContext

类似于vue 中的Provider

jsx
const ThemeContext = createContext(null);
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/React/ReactHooks/useEffect.html b/React/ReactHooks/useEffect.html
index a05f12d..98becf6 100644
--- a/React/ReactHooks/useEffect.html
+++ b/React/ReactHooks/useEffect.html
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
-    
-    
+    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/React/ReactHooks/useRef.html b/React/ReactHooks/useRef.html
index 80b755d..88a8840 100644
--- a/React/ReactHooks/useRef.html
+++ b/React/ReactHooks/useRef.html
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
Skip to content
On this page

useRef

useRef 更改引用后不会引发重新渲染

jsx
const ref = useRef(0);
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/React/ReactHooks/useState.html b/React/ReactHooks/useState.html
index c384ebf..bc44369 100644
--- a/React/ReactHooks/useState.html
+++ b/React/ReactHooks/useState.html
@@ -6,8 +6,8 @@
     怀谷 | 怀谷
     
     
-    
-    
+    
+    
     
     
   
   
   
-    
Skip to content
On this page

useState

实际上就是为你的组件创建数据的状态,传入的参数为该数据的初始状态

WARNING

严格模式下 react 会 render 两次已确认组件是纯函数

js
const initNum = 0;
+    
Skip to content
On this page

useState

实际上就是为你的组件创建数据的状态,传入的参数为该数据的初始状态

WARNING

严格模式下 react 会 render 两次已确认组件是纯函数

js
const initNum = 0;
 const [num, setNum] = useState(initNum); // 解构
 

setNum

纯函数,且没有返回值

当 num 为对象时,应该去替换对象

js
const [me, setMe] = useState({
   name: "zyh",
@@ -99,8 +99,8 @@
   );
 }
 
- - + + \ No newline at end of file diff --git a/React/index.html b/React/index.html index d6cd230..ebdb316 100644 --- a/React/index.html +++ b/React/index.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git a/React/redux.html b/React/redux.html index 99788db..5a44032 100644 --- a/React/redux.html +++ b/React/redux.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git a/Vue/CSS/scroll.html b/Vue/CSS/scroll.html index 6c672fa..8d7d6da 100644 --- a/Vue/CSS/scroll.html +++ b/Vue/CSS/scroll.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git "a/Vue/\346\272\220\347\240\201\345\210\206\346\236\220/VNode\344\270\216diff\347\256\227\346\263\225.html" "b/Vue/\346\272\220\347\240\201\345\210\206\346\236\220/VNode\344\270\216diff\347\256\227\346\263\225.html" index ac466be..bfe006f 100644 --- "a/Vue/\346\272\220\347\240\201\345\210\206\346\236\220/VNode\344\270\216diff\347\256\227\346\263\225.html" +++ "b/Vue/\346\272\220\347\240\201\345\210\206\346\236\220/VNode\344\270\216diff\347\256\227\346\263\225.html" @@ -6,8 +6,8 @@ 数据驱动视图 | 怀谷 - - + + -
Skip to content
On this page

数据驱动视图

众所周知,Vue通过数据绑定来修改视图,当某个数据被修改的时候,set方法会让闭包中的Dep调用notify通知所有订阅者Watcher,Watcher通过get方法执行vm._update(vm._render(), hydrating)。

JavaScript
Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
+    
Skip to content
On this page

数据驱动视图

众所周知,Vue通过数据绑定来修改视图,当某个数据被修改的时候,set方法会让闭包中的Dep调用notify通知所有订阅者Watcher,Watcher通过get方法执行vm._update(vm._render(), hydrating)。

JavaScript
Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
     const vm: Component = this
     /*如果已经该组件已经挂载过了则代表进入这个步骤是个更新的过程,触发beforeUpdate钩子*/
     if (vm._isMounted) {
@@ -75,8 +75,8 @@
   return typeA === typeB
 }
 
- - + + \ No newline at end of file diff --git "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-attrs.html" "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-attrs.html" index 4a0e43c..4c914fa 100644 --- "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-attrs.html" +++ "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-attrs.html" @@ -6,8 +6,8 @@ attrs/listeners | 怀谷 - - + + -
Skip to content
On this page

attrs/listeners

一、$attrs介绍

  • 当项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。
  • 了解:如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
  • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, inheritAttrs: false是不会影响 style 和 class 的绑定

使用场景: A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)

alt

二、$listeners介绍

$listeners属性,它是一个对象,里面包含了作用在这个组件上的所有监听器,你就可以配合 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。(相当于子组件继承父组件的事件)

三、attrs和listeners的使用场景

TIP

$attrs/$listeners一般用于对组件的二次封装,实现功能扩展

需求:对element-ui的button组件实现增加鼠标悬停提示

HintButton为el-button的二次封装

vue
<template>
+    
Skip to content
On this page

attrs/listeners

一、$attrs介绍

  • 当项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。
  • 了解:如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
  • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, inheritAttrs: false是不会影响 style 和 class 的绑定

使用场景: A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)

alt

二、$listeners介绍

$listeners属性,它是一个对象,里面包含了作用在这个组件上的所有监听器,你就可以配合 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。(相当于子组件继承父组件的事件)

三、attrs和listeners的使用场景

TIP

$attrs/$listeners一般用于对组件的二次封装,实现功能扩展

需求:对element-ui的button组件实现增加鼠标悬停提示

HintButton为el-button的二次封装

vue
<template>
   <div>
     <h2>自定义带Hover提示的按钮</h2>
     <!-- 二次封装的HintButton按钮的时候,把el-button需要的数据传递过去 -->
@@ -63,8 +63,8 @@
 };
 </script>
 

效果实现

alt

log打印

alt

- - + + \ No newline at end of file diff --git "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-parent.html" "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-parent.html" index 1254b5b..0b5b9fe 100644 --- "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-parent.html" +++ "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-parent.html" @@ -6,8 +6,8 @@ $parent/$children 与 ref | 怀谷 - - + + -
Skip to content
On this page

$parent/$children 与 ref

在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网

DANGER

$refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

再此重点介绍$parent/$children的使用

  1. 使用this.$refs.paramsName能更快的获取操作子组件属性值或函数

使用$children[i].paramsName 来获取某个子组件的属性值或函数,$children返回的是一个子组件数组

html
<template>
+    
Skip to content
On this page

$parent/$children 与 ref

在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网

DANGER

$refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

再此重点介绍$parent/$children的使用

  1. 使用this.$refs.paramsName能更快的获取操作子组件属性值或函数

使用$children[i].paramsName 来获取某个子组件的属性值或函数,$children返回的是一个子组件数组

html
<template>
     <div class="parent">
         <Childone></Childone>
         <Childtwo></Childtwo>
@@ -87,8 +87,8 @@
     }
 }
 
- - + + \ No newline at end of file diff --git "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-props.html" "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-props.html" index d6d1ece..9b95bf0 100644 --- "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-props.html" +++ "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-props.html" @@ -6,8 +6,8 @@ props/$emit | 怀谷 - - + + -
Skip to content
On this page

props/$emit

1.1props配置项

  1. 功能:让组件接收外部传过来的数据
  2. 传递数据:<Demo name="xxx"/>
  3. 接收数据:
    • 第一种方式(只接收):props:['name']
    • 第二种方式(限制类型):props:{name:String}
    • 第三种方式(限制类型、限制必要性、指定默认值):
js
props:{
+    
Skip to content
On this page

props/$emit

1.1props配置项

  1. 功能:让组件接收外部传过来的数据
  2. 传递数据:<Demo name="xxx"/>
  3. 接收数据:
    • 第一种方式(只接收):props:['name']
    • 第二种方式(限制类型):props:{name:String}
    • 第三种方式(限制类型、限制必要性、指定默认值):
js
props:{
 	name:{
 	type:String, //类型
 	required:true, //必要性
@@ -89,8 +89,8 @@
    this.$refs.demo.$on('test',this.test)
 }
 
  • 子组件触发自定义事件:this.$emit('test',传给父组件的数据)
  • 解绑自定义事件this.$off('test')
  • 组件上也可以绑定原生DOM事件,需要使用native修饰符。
  • - - + + \ No newline at end of file diff --git "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-provide.html" "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-provide.html" index dc4a701..2ab6253 100644 --- "a/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-provide.html" +++ "b/Vue/\347\273\204\344\273\266\351\200\232\344\277\241/Api-provide.html" @@ -6,8 +6,8 @@ provide/inject | 怀谷 - - + + -
    Skip to content
    On this page

    provide/inject

    使用前言

    在父子组件传递数据时,通常使用的是 props 和 emit。当父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。

    像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。

    注意:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

    基本知识

    provide :一个对象或返回一个对象的函数

    inject :一个字符串数组,或 一个对象,对象的 [key] 是本地的绑定名

    一、Vue2 的 provide / inject 使用

    1. 用provide :是一个对象,里面是属性和值。如:
    js
    provide:{
    +    
    Skip to content
    On this page

    provide/inject

    使用前言

    在父子组件传递数据时,通常使用的是 props 和 emit。当父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。

    像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。

    注意:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

    基本知识

    provide :一个对象或返回一个对象的函数

    inject :一个字符串数组,或 一个对象,对象的 [key] 是本地的绑定名

    一、Vue2 的 provide / inject 使用

    1. 用provide :是一个对象,里面是属性和值。如:
    js
    provide:{
       info:""
     }
     
    1. 如果 provide 需要使用 data 内的数据时,这样写就会报错。访问组件实例 property 时,需要将 provide 转换为返回对象的函数。
    js
    provide(){
    @@ -96,8 +96,8 @@
       }
     }
     
    - - + + \ No newline at end of file diff --git a/assets/JS.TS_ES6_Iterator.md.1c76fe5e.js b/assets/JS.TS_ES6_Iterator.md.f3fca7d1.js similarity index 99% rename from assets/JS.TS_ES6_Iterator.md.1c76fe5e.js rename to assets/JS.TS_ES6_Iterator.md.f3fca7d1.js index 8ab8d49..fc45530 100644 --- a/assets/JS.TS_ES6_Iterator.md.1c76fe5e.js +++ b/assets/JS.TS_ES6_Iterator.md.f3fca7d1.js @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Iterator","slug":"iterator","link":"#iterator","children":[]},{"level":2,"title":"手写 Iteration","slug":"手写-iteration","link":"#手写-iteration","children":[]},{"level":2,"title":"将对象为可迭代的","slug":"将对象为可迭代的","link":"#将对象为可迭代的","children":[]}],"relativePath":"JS.TS/ES6/Iterator.md"}'),p={name:"JS.TS/ES6/Iterator.md"},o=l(`

    Iterator

    目的 : 为不同的数据集合提供了相同的访问机制

    Q: 为哪些数据集合呢 A: Array Map Object Set

    手写 Iteration

    js
    function myIteration(arr){
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Iterator","slug":"iterator","link":"#iterator","children":[]},{"level":2,"title":"手写 Iteration","slug":"手写-iteration","link":"#手写-iteration","children":[]},{"level":2,"title":"将对象为可迭代的","slug":"将对象为可迭代的","link":"#将对象为可迭代的","children":[]}],"relativePath":"JS.TS/ES6/Iterator.md"}'),p={name:"JS.TS/ES6/Iterator.md"},o=l(`

    Iterator

    目的 : 为不同的数据集合提供了相同的访问机制

    Q: 为哪些数据集合呢 A: Array Map Object Set

    手写 Iteration

    js
    function myIteration(arr){
         let index = 0
         return {
             next:function(){
    diff --git a/assets/JS.TS_ES6_Iterator.md.1c76fe5e.lean.js b/assets/JS.TS_ES6_Iterator.md.f3fca7d1.lean.js
    similarity index 90%
    rename from assets/JS.TS_ES6_Iterator.md.1c76fe5e.lean.js
    rename to assets/JS.TS_ES6_Iterator.md.f3fca7d1.lean.js
    index 9b4d364..acb24b0 100644
    --- a/assets/JS.TS_ES6_Iterator.md.1c76fe5e.lean.js
    +++ b/assets/JS.TS_ES6_Iterator.md.f3fca7d1.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Iterator","slug":"iterator","link":"#iterator","children":[]},{"level":2,"title":"手写 Iteration","slug":"手写-iteration","link":"#手写-iteration","children":[]},{"level":2,"title":"将对象为可迭代的","slug":"将对象为可迭代的","link":"#将对象为可迭代的","children":[]}],"relativePath":"JS.TS/ES6/Iterator.md"}'),p={name:"JS.TS/ES6/Iterator.md"},o=l("",8),e=[o];function t(c,r,F,y,D,i){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Iterator","slug":"iterator","link":"#iterator","children":[]},{"level":2,"title":"手写 Iteration","slug":"手写-iteration","link":"#手写-iteration","children":[]},{"level":2,"title":"将对象为可迭代的","slug":"将对象为可迭代的","link":"#将对象为可迭代的","children":[]}],"relativePath":"JS.TS/ES6/Iterator.md"}'),p={name:"JS.TS/ES6/Iterator.md"},o=l("",8),e=[o];function t(c,r,F,y,D,i){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
    diff --git a/assets/JS.TS_ES6_Symbol.md.7d12d370.js b/assets/JS.TS_ES6_Symbol.md.50dec9c7.js
    similarity index 98%
    rename from assets/JS.TS_ES6_Symbol.md.7d12d370.js
    rename to assets/JS.TS_ES6_Symbol.md.50dec9c7.js
    index e10a866..7c4c97b 100644
    --- a/assets/JS.TS_ES6_Symbol.md.7d12d370.js
    +++ b/assets/JS.TS_ES6_Symbol.md.50dec9c7.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于Symbol","slug":"关于symbol","link":"#关于symbol","children":[]}],"relativePath":"JS.TS/ES6/Symbol.md"}'),o={name:"JS.TS/ES6/Symbol.md"},p=n(`

    关于Symbol

    在对象上设置Symbol

    1. 使用 []

    2. 使用Object.defineProperty

    js
    let mySymbol = Symbol();
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于Symbol","slug":"关于symbol","link":"#关于symbol","children":[]}],"relativePath":"JS.TS/ES6/Symbol.md"}'),o={name:"JS.TS/ES6/Symbol.md"},p=n(`

    关于Symbol

    在对象上设置Symbol

    1. 使用 []

    2. 使用Object.defineProperty

    js
    let mySymbol = Symbol();
     Object.defineProperty(a, mySymbol, { value: 'Hello!' });
     

    WARNING

    不能使用点运算符访问

    js
        Object.defineProperty(a, mySymbol, { value: 'Hello!' });
         a.mySymbol // 报错
    diff --git a/assets/JS.TS_ES6_Symbol.md.7d12d370.lean.js b/assets/JS.TS_ES6_Symbol.md.50dec9c7.lean.js
    similarity index 85%
    rename from assets/JS.TS_ES6_Symbol.md.7d12d370.lean.js
    rename to assets/JS.TS_ES6_Symbol.md.50dec9c7.lean.js
    index 753e627..14a6951 100644
    --- a/assets/JS.TS_ES6_Symbol.md.7d12d370.lean.js
    +++ b/assets/JS.TS_ES6_Symbol.md.50dec9c7.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于Symbol","slug":"关于symbol","link":"#关于symbol","children":[]}],"relativePath":"JS.TS/ES6/Symbol.md"}'),o={name:"JS.TS/ES6/Symbol.md"},p=n("",8),e=[p];function t(c,r,y,D,F,i){return l(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于Symbol","slug":"关于symbol","link":"#关于symbol","children":[]}],"relativePath":"JS.TS/ES6/Symbol.md"}'),o={name:"JS.TS/ES6/Symbol.md"},p=n("",8),e=[p];function t(c,r,y,D,F,i){return l(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
    diff --git a/assets/JS.TS_ES6_index.md.4ce42092.js b/assets/JS.TS_ES6_index.md.691bf43d.js
    similarity index 90%
    rename from assets/JS.TS_ES6_index.md.4ce42092.js
    rename to assets/JS.TS_ES6_index.md.691bf43d.js
    index ae5913c..11c437a 100644
    --- a/assets/JS.TS_ES6_index.md.4ce42092.js
    +++ b/assets/JS.TS_ES6_index.md.691bf43d.js
    @@ -1 +1 @@
    -import{_ as t,c as s,o as a,b as e,d as n}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"面试老被问ES6?","slug":"面试老被问es6","link":"#面试老被问es6","children":[]}],"relativePath":"JS.TS/ES6/index.md"}'),o={name:"JS.TS/ES6/index.md"},r=e("h2",{id:"面试老被问es6",tabindex:"-1"},[n("面试老被问ES6? "),e("a",{class:"header-anchor",href:"#面试老被问es6","aria-hidden":"true"},"#")],-1),d=e("p",null,"我们今天来谈谈ES6",-1),c=[r,d];function i(l,_,h,p,S,f){return a(),s("div",null,c)}const x=t(o,[["render",i]]);export{u as __pageData,x as default};
    +import{_ as t,c as s,o as a,b as e,d as n}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"面试老被问ES6?","slug":"面试老被问es6","link":"#面试老被问es6","children":[]}],"relativePath":"JS.TS/ES6/index.md"}'),o={name:"JS.TS/ES6/index.md"},r=e("h2",{id:"面试老被问es6",tabindex:"-1"},[n("面试老被问ES6? "),e("a",{class:"header-anchor",href:"#面试老被问es6","aria-hidden":"true"},"#")],-1),d=e("p",null,"我们今天来谈谈ES6",-1),c=[r,d];function i(l,_,h,p,S,f){return a(),s("div",null,c)}const x=t(o,[["render",i]]);export{u as __pageData,x as default};
    diff --git a/assets/JS.TS_ES6_index.md.4ce42092.lean.js b/assets/JS.TS_ES6_index.md.691bf43d.lean.js
    similarity index 90%
    rename from assets/JS.TS_ES6_index.md.4ce42092.lean.js
    rename to assets/JS.TS_ES6_index.md.691bf43d.lean.js
    index ae5913c..11c437a 100644
    --- a/assets/JS.TS_ES6_index.md.4ce42092.lean.js
    +++ b/assets/JS.TS_ES6_index.md.691bf43d.lean.js
    @@ -1 +1 @@
    -import{_ as t,c as s,o as a,b as e,d as n}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"面试老被问ES6?","slug":"面试老被问es6","link":"#面试老被问es6","children":[]}],"relativePath":"JS.TS/ES6/index.md"}'),o={name:"JS.TS/ES6/index.md"},r=e("h2",{id:"面试老被问es6",tabindex:"-1"},[n("面试老被问ES6? "),e("a",{class:"header-anchor",href:"#面试老被问es6","aria-hidden":"true"},"#")],-1),d=e("p",null,"我们今天来谈谈ES6",-1),c=[r,d];function i(l,_,h,p,S,f){return a(),s("div",null,c)}const x=t(o,[["render",i]]);export{u as __pageData,x as default};
    +import{_ as t,c as s,o as a,b as e,d as n}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"面试老被问ES6?","slug":"面试老被问es6","link":"#面试老被问es6","children":[]}],"relativePath":"JS.TS/ES6/index.md"}'),o={name:"JS.TS/ES6/index.md"},r=e("h2",{id:"面试老被问es6",tabindex:"-1"},[n("面试老被问ES6? "),e("a",{class:"header-anchor",href:"#面试老被问es6","aria-hidden":"true"},"#")],-1),d=e("p",null,"我们今天来谈谈ES6",-1),c=[r,d];function i(l,_,h,p,S,f){return a(),s("div",null,c)}const x=t(o,[["render",i]]);export{u as __pageData,x as default};
    diff --git a/assets/JS.TS_ES6_promise.md.1d63510c.js b/assets/JS.TS_ES6_promise.md.ce64363c.js
    similarity index 99%
    rename from assets/JS.TS_ES6_promise.md.1d63510c.js
    rename to assets/JS.TS_ES6_promise.md.ce64363c.js
    index 88207e4..af7511c 100644
    --- a/assets/JS.TS_ES6_promise.md.1d63510c.js
    +++ b/assets/JS.TS_ES6_promise.md.ce64363c.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"promise.then","slug":"promise-then","link":"#promise-then","children":[]}],"relativePath":"JS.TS/ES6/promise.md"}'),p={name:"JS.TS/ES6/promise.md"},o=l(`

    promise

    Promise 构造函数需要传的参数就是一个 executor 构造器函数。executor 里需要传 resolve 和 reject 函数,用于改变 Promise 实例的状态

    js
    const promise = new Promise(executor)
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"promise.then","slug":"promise-then","link":"#promise-then","children":[]}],"relativePath":"JS.TS/ES6/promise.md"}'),p={name:"JS.TS/ES6/promise.md"},o=l(`

    promise

    Promise 构造函数需要传的参数就是一个 executor 构造器函数。executor 里需要传 resolve 和 reject 函数,用于改变 Promise 实例的状态

    js
    const promise = new Promise(executor)
     // 需要传入构造器函数
     //定义状态
     const PENDING = 'pending'
    diff --git a/assets/JS.TS_ES6_promise.md.1d63510c.lean.js b/assets/JS.TS_ES6_promise.md.ce64363c.lean.js
    similarity index 87%
    rename from assets/JS.TS_ES6_promise.md.1d63510c.lean.js
    rename to assets/JS.TS_ES6_promise.md.ce64363c.lean.js
    index 47ec31b..485e333 100644
    --- a/assets/JS.TS_ES6_promise.md.1d63510c.lean.js
    +++ b/assets/JS.TS_ES6_promise.md.ce64363c.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"promise.then","slug":"promise-then","link":"#promise-then","children":[]}],"relativePath":"JS.TS/ES6/promise.md"}'),p={name:"JS.TS/ES6/promise.md"},o=l("",6),e=[o];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const f=s(p,[["render",t]]);export{C as __pageData,f as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"promise.then","slug":"promise-then","link":"#promise-then","children":[]}],"relativePath":"JS.TS/ES6/promise.md"}'),p={name:"JS.TS/ES6/promise.md"},o=l("",6),e=[o];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const f=s(p,[["render",t]]);export{C as __pageData,f as default};
    diff --git "a/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.js" "b/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.js"
    similarity index 98%
    rename from "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.js"
    rename to "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.js"
    index e8e0cc3..9d85162 100644
    --- "a/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.js"
    +++ "b/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[{"level":3,"title":"事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。","slug":"事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","link":"#事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","children":[]}]}],"relativePath":"JS.TS/ES6/解构赋值.md"}'),o={name:"JS.TS/ES6/解构赋值.md"},p=l(`

    js
    
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[{"level":3,"title":"事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。","slug":"事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","link":"#事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","children":[]}]}],"relativePath":"JS.TS/ES6/解构赋值.md"}'),o={name:"JS.TS/ES6/解构赋值.md"},p=l(`

    js
    
     let test =[1,3]
     let [x,y] =test
     console.log(x,y)  // 1,3
    diff --git "a/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.lean.js" "b/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.lean.js"
    similarity index 91%
    rename from "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.lean.js"
    rename to "assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.lean.js"
    index a8c8287..066ac5e 100644
    --- "a/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.2ad69e4a.lean.js"
    +++ "b/assets/JS.TS_ES6_\350\247\243\346\236\204\350\265\213\345\200\274.md.31960747.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[{"level":3,"title":"事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。","slug":"事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","link":"#事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","children":[]}]}],"relativePath":"JS.TS/ES6/解构赋值.md"}'),o={name:"JS.TS/ES6/解构赋值.md"},p=l("",6),e=[p];function t(c,r,C,y,i,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{F as __pageData,d as default};
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[{"level":3,"title":"事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。","slug":"事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","link":"#事实上-只要某种数据结构具有-iterator-接口-都可以采用数组形式的解构赋值。","children":[]}]}],"relativePath":"JS.TS/ES6/解构赋值.md"}'),o={name:"JS.TS/ES6/解构赋值.md"},p=l("",6),e=[p];function t(c,r,C,y,i,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{F as __pageData,d as default};
    diff --git "a/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.js" "b/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.js"
    similarity index 79%
    rename from "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.js"
    rename to "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.js"
    index 5d5a108..fd714d5 100644
    --- "a/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.js"
    +++ "b/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/ES6/运算符.md"}'),r={name:"JS.TS/ES6/运算符.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/ES6/运算符.md"}'),r={name:"JS.TS/ES6/运算符.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.lean.js" "b/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.lean.js"
    similarity index 79%
    rename from "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.lean.js"
    rename to "assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.lean.js"
    index 5d5a108..fd714d5 100644
    --- "a/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.0555d365.lean.js"
    +++ "b/assets/JS.TS_ES6_\350\277\220\347\256\227\347\254\246.md.6a0dea18.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/ES6/运算符.md"}'),r={name:"JS.TS/ES6/运算符.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/ES6/运算符.md"}'),r={name:"JS.TS/ES6/运算符.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.js" "b/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.js"
    similarity index 98%
    rename from "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.js"
    rename to "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.js"
    index 486daa7..ae7e211 100644
    --- "a/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.js"
    +++ "b/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.js"
    @@ -1,4 +1,4 @@
    -import{_ as n,c as a,o as l,a as o,b as s}from"./app.3e0f3fbc.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量提升","slug":"变量提升","link":"#变量提升","children":[{"level":3,"title":"执行栈","slug":"执行栈","link":"#执行栈","children":[]}]}],"relativePath":"JS.TS/JS上下文和执行栈.md"}'),p={name:"JS.TS/JS上下文和执行栈.md"},e=o(`

    变量提升

    js
    foo();  // foo2
    +import{_ as n,c as a,o as l,a as o,b as s}from"./app.ec03d301.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量提升","slug":"变量提升","link":"#变量提升","children":[{"level":3,"title":"执行栈","slug":"执行栈","link":"#执行栈","children":[]}]}],"relativePath":"JS.TS/JS上下文和执行栈.md"}'),p={name:"JS.TS/JS上下文和执行栈.md"},e=o(`

    变量提升

    js
    foo();  // foo2
     var foo = function() {
         console.log('foo1');
     }
    diff --git "a/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.lean.js" "b/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.lean.js"
    similarity index 91%
    rename from "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.lean.js"
    rename to "assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.lean.js"
    index 1d436f8..2aaa5af 100644
    --- "a/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.b55cc06e.lean.js"
    +++ "b/assets/JS.TS_JS\344\270\212\344\270\213\346\226\207\345\222\214\346\211\247\350\241\214\346\240\210.md.401ce3f9.lean.js"
    @@ -1 +1 @@
    -import{_ as n,c as a,o as l,a as o,b as s}from"./app.3e0f3fbc.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量提升","slug":"变量提升","link":"#变量提升","children":[{"level":3,"title":"执行栈","slug":"执行栈","link":"#执行栈","children":[]}]}],"relativePath":"JS.TS/JS上下文和执行栈.md"}'),p={name:"JS.TS/JS上下文和执行栈.md"},e=o("",5),t=s("ol",null,[s("li",{"n:2":""},[s("p",null,"a=")]),s("li",null,[s("p",null,"赋值给a.x 但没有该x属性,所以在原对象上加上该属性,该即b指向的对象")])],-1),c=[e,t];function r(y,D,F,i,A,C){return l(),a("div",null,c)}const f=n(p,[["render",r]]);export{_ as __pageData,f as default};
    +import{_ as n,c as a,o as l,a as o,b as s}from"./app.ec03d301.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量提升","slug":"变量提升","link":"#变量提升","children":[{"level":3,"title":"执行栈","slug":"执行栈","link":"#执行栈","children":[]}]}],"relativePath":"JS.TS/JS上下文和执行栈.md"}'),p={name:"JS.TS/JS上下文和执行栈.md"},e=o("",5),t=s("ol",null,[s("li",{"n:2":""},[s("p",null,"a=")]),s("li",null,[s("p",null,"赋值给a.x 但没有该x属性,所以在原对象上加上该属性,该即b指向的对象")])],-1),c=[e,t];function r(y,D,F,i,A,C){return l(),a("div",null,c)}const f=n(p,[["render",r]]);export{_ as __pageData,f as default};
    diff --git a/assets/JS.TS_TS_is.md.454e2256.js b/assets/JS.TS_TS_is.md.3088178b.js
    similarity index 99%
    rename from assets/JS.TS_TS_is.md.454e2256.js
    rename to assets/JS.TS_TS_is.md.3088178b.js
    index 4cabb8d..7dc1f06 100644
    --- a/assets/JS.TS_TS_is.md.454e2256.js
    +++ b/assets/JS.TS_TS_is.md.3088178b.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"ts is","slug":"ts-is","link":"#ts-is","children":[]}],"relativePath":"JS.TS/TS/is.md"}'),o={name:"JS.TS/TS/is.md"},p=l(`

    ts is

    ts
      _isElement(obj: any): obj is Element {
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"ts is","slug":"ts-is","link":"#ts-is","children":[]}],"relativePath":"JS.TS/TS/is.md"}'),o={name:"JS.TS/TS/is.md"},p=l(`

    ts is

    ts
      _isElement(obj: any): obj is Element {
         return !!(obj && obj.nodeType == 1);
       }
     

    今天刚看到这个ts is 不同于as 当 _isElement 返回true时 obj 被定义为Element类型

    ts
    const foo = (val: unknown) => isString(val) ? val.toUpperCase() : val
    diff --git a/assets/JS.TS_TS_is.md.454e2256.lean.js b/assets/JS.TS_TS_is.md.3088178b.lean.js
    similarity index 84%
    rename from assets/JS.TS_TS_is.md.454e2256.lean.js
    rename to assets/JS.TS_TS_is.md.3088178b.lean.js
    index 38e3897..a5fec2f 100644
    --- a/assets/JS.TS_TS_is.md.454e2256.lean.js
    +++ b/assets/JS.TS_TS_is.md.3088178b.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"ts is","slug":"ts-is","link":"#ts-is","children":[]}],"relativePath":"JS.TS/TS/is.md"}'),o={name:"JS.TS/TS/is.md"},p=l("",6),t=[p];function e(c,r,y,D,A,C){return n(),a("div",null,t)}const g=s(o,[["render",e]]);export{i as __pageData,g as default};
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"ts is","slug":"ts-is","link":"#ts-is","children":[]}],"relativePath":"JS.TS/TS/is.md"}'),o={name:"JS.TS/TS/is.md"},p=l("",6),t=[p];function e(c,r,y,D,A,C){return n(),a("div",null,t)}const g=s(o,[["render",e]]);export{i as __pageData,g as default};
    diff --git "a/assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.js" "b/assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.js"
    similarity index 99%
    rename from "assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.js"
    rename to "assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.js"
    index 64a21c7..587acce 100644
    --- "a/assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.js"
    +++ "b/assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"函数不能作为索引签名的问题","slug":"函数不能作为索引签名的问题","link":"#函数不能作为索引签名的问题","children":[]}],"relativePath":"JS.TS/TS/索引.md"}'),p={name:"JS.TS/TS/索引.md"},o=l(`

    函数不能作为索引签名的问题

    ts
    let map: Map<string, Array<Function>> = new Map()
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"函数不能作为索引签名的问题","slug":"函数不能作为索引签名的问题","link":"#函数不能作为索引签名的问题","children":[]}],"relativePath":"JS.TS/TS/索引.md"}'),p={name:"JS.TS/TS/索引.md"},o=l(`

    函数不能作为索引签名的问题

    ts
    let map: Map<string, Array<Function>> = new Map()
     

    用 indexOf 读取签名 并且删除不能直接赋值 null

    ts
    mapget(theme)[cb] = null
     

    在 unsubscribe 方法中,代码 并不能正确地将回调函数从订阅列表中删除。 这是因为 ma.get(theme)[cb] 会将 cb 作为数组的下标来访问数组中的元素,但是 cb 是一个函数,无法直接作为数组下标使用。 以下是一个简单观察者模式的实现

    ts
    class Broker {
       private subs: Map<string, Function[]> = new Map();
    diff --git "a/assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.lean.js" "b/assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.lean.js"
    similarity index 87%
    rename from "assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.lean.js"
    rename to "assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.lean.js"
    index 77d11a6..abb4a2f 100644
    --- "a/assets/JS.TS_TS_\347\264\242\345\274\225.md.18373771.lean.js"
    +++ "b/assets/JS.TS_TS_\347\264\242\345\274\225.md.6a7434e5.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"函数不能作为索引签名的问题","slug":"函数不能作为索引签名的问题","link":"#函数不能作为索引签名的问题","children":[]}],"relativePath":"JS.TS/TS/索引.md"}'),p={name:"JS.TS/TS/索引.md"},o=l("",6),e=[o];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"函数不能作为索引签名的问题","slug":"函数不能作为索引签名的问题","link":"#函数不能作为索引签名的问题","children":[]}],"relativePath":"JS.TS/TS/索引.md"}'),p={name:"JS.TS/TS/索引.md"},o=l("",6),e=[o];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.js" "b/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.js"
    similarity index 93%
    rename from "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.js"
    index ded1f09..170cef1 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.js"
    @@ -1 +1 @@
    -import{_ as t,c as s,o,b as e,d as a}from"./app.3e0f3fbc.js";const T=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Js 任务","slug":"js-任务","link":"#js-任务","children":[]}],"relativePath":"JS.TS/基础/Eventloop.md"}'),r={name:"JS.TS/基础/Eventloop.md"},n=e("h2",{id:"js-任务",tabindex:"-1"},[a("Js 任务 "),e("a",{class:"header-anchor",href:"#js-任务","aria-hidden":"true"},"#")],-1),c=e("p",null,"MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。",-1),i=e("p",null,"MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)",-1),d=[n,c,i];function l(_,p,h,m,u,v){return o(),s("div",null,d)}const k=t(r,[["render",l]]);export{T as __pageData,k as default};
    +import{_ as t,c as s,o,b as e,d as a}from"./app.ec03d301.js";const T=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Js 任务","slug":"js-任务","link":"#js-任务","children":[]}],"relativePath":"JS.TS/基础/Eventloop.md"}'),r={name:"JS.TS/基础/Eventloop.md"},n=e("h2",{id:"js-任务",tabindex:"-1"},[a("Js 任务 "),e("a",{class:"header-anchor",href:"#js-任务","aria-hidden":"true"},"#")],-1),c=e("p",null,"MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。",-1),i=e("p",null,"MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)",-1),d=[n,c,i];function l(_,p,h,m,u,v){return o(),s("div",null,d)}const k=t(r,[["render",l]]);export{T as __pageData,k as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.lean.js" "b/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.lean.js"
    similarity index 93%
    rename from "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.lean.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.lean.js"
    index ded1f09..170cef1 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.2bedcbfb.lean.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_Eventloop.md.5f45abd4.lean.js"
    @@ -1 +1 @@
    -import{_ as t,c as s,o,b as e,d as a}from"./app.3e0f3fbc.js";const T=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Js 任务","slug":"js-任务","link":"#js-任务","children":[]}],"relativePath":"JS.TS/基础/Eventloop.md"}'),r={name:"JS.TS/基础/Eventloop.md"},n=e("h2",{id:"js-任务",tabindex:"-1"},[a("Js 任务 "),e("a",{class:"header-anchor",href:"#js-任务","aria-hidden":"true"},"#")],-1),c=e("p",null,"MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。",-1),i=e("p",null,"MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)",-1),d=[n,c,i];function l(_,p,h,m,u,v){return o(),s("div",null,d)}const k=t(r,[["render",l]]);export{T as __pageData,k as default};
    +import{_ as t,c as s,o,b as e,d as a}from"./app.ec03d301.js";const T=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Js 任务","slug":"js-任务","link":"#js-任务","children":[]}],"relativePath":"JS.TS/基础/Eventloop.md"}'),r={name:"JS.TS/基础/Eventloop.md"},n=e("h2",{id:"js-任务",tabindex:"-1"},[a("Js 任务 "),e("a",{class:"header-anchor",href:"#js-任务","aria-hidden":"true"},"#")],-1),c=e("p",null,"MacroTask(宏任务) script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。",-1),i=e("p",null,"MicroTask(微任务) Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)",-1),d=[n,c,i];function l(_,p,h,m,u,v){return o(),s("div",null,d)}const k=t(r,[["render",l]]);export{T as __pageData,k as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.js" "b/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.js"
    similarity index 98%
    rename from "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.js"
    index 479daa5..389d51b 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Map 构造函数","slug":"map-构造函数","link":"#map-构造函数","children":[]},{"level":2,"title":"Object和Map的区别","slug":"object和map的区别","link":"#object和map的区别","children":[]},{"level":2,"title":"weakMap","slug":"weakmap","link":"#weakmap","children":[]}],"relativePath":"JS.TS/基础/Js中的map和weakMap.md"}'),l={name:"JS.TS/基础/Js中的map和weakMap.md"},o=p(`

    Map 构造函数

    js
        const map =new Map()
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Map 构造函数","slug":"map-构造函数","link":"#map-构造函数","children":[]},{"level":2,"title":"Object和Map的区别","slug":"object和map的区别","link":"#object和map的区别","children":[]},{"level":2,"title":"weakMap","slug":"weakmap","link":"#weakmap","children":[]}],"relativePath":"JS.TS/基础/Js中的map和weakMap.md"}'),l={name:"JS.TS/基础/Js中的map和weakMap.md"},o=p(`

    Map 构造函数

    js
        const map =new Map()
         map.set("huaigu",{
             name:"tomao"
         })
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.lean.js" "b/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.lean.js"
    similarity index 90%
    rename from "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.lean.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.lean.js"
    index 49ef28c..6cc67c1 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.a9045063.lean.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_Js\344\270\255\347\232\204map\345\222\214weakMap.md.bed29ac7.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Map 构造函数","slug":"map-构造函数","link":"#map-构造函数","children":[]},{"level":2,"title":"Object和Map的区别","slug":"object和map的区别","link":"#object和map的区别","children":[]},{"level":2,"title":"weakMap","slug":"weakmap","link":"#weakmap","children":[]}],"relativePath":"JS.TS/基础/Js中的map和weakMap.md"}'),l={name:"JS.TS/基础/Js中的map和weakMap.md"},o=p("",10),e=[o];function t(c,r,i,y,D,F){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default};
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"Map 构造函数","slug":"map-构造函数","link":"#map-构造函数","children":[]},{"level":2,"title":"Object和Map的区别","slug":"object和map的区别","link":"#object和map的区别","children":[]},{"level":2,"title":"weakMap","slug":"weakmap","link":"#weakmap","children":[]}],"relativePath":"JS.TS/基础/Js中的map和weakMap.md"}'),l={name:"JS.TS/基础/Js中的map和weakMap.md"},o=p("",10),e=[o];function t(c,r,i,y,D,F){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.js" "b/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.js"
    similarity index 99%
    rename from "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.js"
    index 3692cc6..442ec25 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于 new 操作符","slug":"关于-new-操作符","link":"#关于-new-操作符","children":[]},{"level":2,"title":"bind,call,apply 的区别","slug":"bind-call-apply-的区别","link":"#bind-call-apply-的区别","children":[]}],"relativePath":"JS.TS/基础/new操作符.md"}'),p={name:"JS.TS/基础/new操作符.md"},o=l(`

    关于 new 操作符

    js
    function realnew () {
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于 new 操作符","slug":"关于-new-操作符","link":"#关于-new-操作符","children":[]},{"level":2,"title":"bind,call,apply 的区别","slug":"bind-call-apply-的区别","link":"#bind-call-apply-的区别","children":[]}],"relativePath":"JS.TS/基础/new操作符.md"}'),p={name:"JS.TS/基础/new操作符.md"},o=l(`

    关于 new 操作符

    js
    function realnew () {
       let obj = {}
       let Con = Array.prototype.shift.call(arguments)
       console.log(Con)
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.lean.js" "b/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.lean.js"
    similarity index 89%
    rename from "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.lean.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.lean.js"
    index 4b23fd5..3527012 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.bfd6f736.lean.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246.md.c29bc184.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于 new 操作符","slug":"关于-new-操作符","link":"#关于-new-操作符","children":[]},{"level":2,"title":"bind,call,apply 的区别","slug":"bind-call-apply-的区别","link":"#bind-call-apply-的区别","children":[]}],"relativePath":"JS.TS/基础/new操作符.md"}'),p={name:"JS.TS/基础/new操作符.md"},o=l("",10),e=[o];function t(c,r,y,F,D,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"关于 new 操作符","slug":"关于-new-操作符","link":"#关于-new-操作符","children":[]},{"level":2,"title":"bind,call,apply 的区别","slug":"bind-call-apply-的区别","link":"#bind-call-apply-的区别","children":[]}],"relativePath":"JS.TS/基础/new操作符.md"}'),p={name:"JS.TS/基础/new操作符.md"},o=l("",10),e=[o];function t(c,r,y,F,D,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.js" "b/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.js"
    similarity index 81%
    rename from "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.js"
    index 71712ed..68b7910 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/一文搞懂map函数.md"}'),r={name:"JS.TS/基础/一文搞懂map函数.md"};function o(_,s,c,n,p,m){return a(),t("div")}const f=e(r,[["render",o]]);export{i as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/一文搞懂map函数.md"}'),r={name:"JS.TS/基础/一文搞懂map函数.md"};function o(_,s,c,n,p,m){return a(),t("div")}const f=e(r,[["render",o]]);export{i as __pageData,f as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.lean.js" "b/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.lean.js"
    similarity index 81%
    rename from "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.lean.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.lean.js"
    index 71712ed..68b7910 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.517438c8.lean.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_\344\270\200\346\226\207\346\220\236\346\207\202map\345\207\275\346\225\260.md.2eb385c8.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/一文搞懂map函数.md"}'),r={name:"JS.TS/基础/一文搞懂map函数.md"};function o(_,s,c,n,p,m){return a(),t("div")}const f=e(r,[["render",o]]);export{i as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/一文搞懂map函数.md"}'),r={name:"JS.TS/基础/一文搞懂map函数.md"};function o(_,s,c,n,p,m){return a(),t("div")}const f=e(r,[["render",o]]);export{i as __pageData,f as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.js" "b/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.js"
    similarity index 80%
    rename from "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.js"
    index 3a20310..5518f5e 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/垃圾回收.md"}'),r={name:"JS.TS/基础/垃圾回收.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/垃圾回收.md"}'),r={name:"JS.TS/基础/垃圾回收.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.lean.js" "b/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.lean.js"
    similarity index 80%
    rename from "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.lean.js"
    rename to "assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.lean.js"
    index 3a20310..5518f5e 100644
    --- "a/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.2e60c866.lean.js"
    +++ "b/assets/JS.TS_\345\237\272\347\241\200_\345\236\203\345\234\276\345\233\236\346\224\266.md.87bf0130.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/垃圾回收.md"}'),r={name:"JS.TS/基础/垃圾回收.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"JS.TS/基础/垃圾回收.md"}'),r={name:"JS.TS/基础/垃圾回收.md"};function o(s,c,n,_,p,d){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.js" "b/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.js"
    similarity index 99%
    rename from "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.js"
    rename to "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.js"
    index 1735bd9..275737b 100644
    --- "a/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.js"
    +++ "b/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/assets/发布订阅模式.2138ebfb.jpg",o="/HuaiGu/assets/发布订阅1.a43e67f8.png",t="data:image/png;base64,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",e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYIAAACLCAYAAABsgp71AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA8oSURBVHhe7d3Lih3HHcdxPYdWEui9zGAhZLAXdsABZy0GDIkRNvgJnAwSjDDOxgpZJcpGF7LwM1gXZzEbeds51V11TnX1v+r/r+4+l1F9P1DMdFf17Zzu+lX3meHc6AAATSMIAKBxBAEANI4gAIDGEQQA0DiCAAAaRxAAQOMIAgBonDkIbt2+43+bKtXlzFnm0NY6rjWPdY31r7E/ax7TQT0/726dPere+Umbd93F2Z3uwXM/OcuwDve69aV6Hxr0+lF3dvu8e+knrV6e3+nOHh/i1Y3e0/NXfp6FYbn+2H2bTdn38VQFQSgpaV4qbaNNH5Lbdm3JCXVxm1L7WtK6atafa2tZR9ymZpsnw4XA7bvdxWs/3XvVPdgcizueUKQO/93ju5u6+k5px20n3XbsTXd576/dzZubcu9Z99bPXdtwHJvjrOq4jsB3hJP3IukgxeMQ3+f1ucBZFOj9sWj7ucYgRGcKAveCB/HvgTQvlbaZu55Dqt2fuH3u96XCutzPXMmR2qZFE9pY2q7tyY8/bcrf/VQlY+eQ7/CHC3L2yKwwun375HITAJfd5a+/dA9dEHzzi69Zmwuj8+7CHeMp35HkQiAN02w730nvNey0YLcwrMMUFsupQRBf8OnF76bTIknn59odW3wcuVIS16fLxWWu3LJz1iktU7OeJccxlwuCjz6+351//Zfut9/+5+dauAvONqoqjfz7upkdqGnZX591dzdB8HD+bUeR24c+yGY9HjuUmsAd3lexbR/8S+7gFIVgN7OsY9/H4ZnvCNIS5ks/U2EZa1mfrSNIt61Nx+J9r1muhrQey7pdm9oSk+pLZV9CELjyyWefdz//45++psx8C18YYfYWXJSmEerLp/7OwE+vKhp9Csex3b++zr+X8Wu2XWa4loY2yUjVv37b5V0Jxyy9dsK8UhBPlN6vvm5/I+klg4Itd/zKOvrt7PXOZlD1aMj6U2Nttx57EGhFEuZr9UvE2w+/l0pOrq60jGSt9dSIgyCUh999371//7tvIdHe++iDO9NturGTGrE95x0eET3tXvjpNY06FKGTdEFwdhZ3bsnr1ndamzuKaLlRuPWdenyMycg+s81xR1hzN+Dft2xHGgXfHvSvl2k/CwxBsMp2DA4eBJY2Y/GFGpU4Jf1JGMruZIxHL0kxpKxrVyPXvnY9qbC8tJ6adWvLW9dVapevC+/jnI50IAWBK198+ZVvIejPjboRZvbCq1nXiK1TevHNvj4oTrefdPLiezNuM4zU42XiIJA68HQb2vRGxSi+33bpvahYl92uLxrt9wLhdZXPuWF7a22r5CCPhmJhealI0lHD7uTz+oszesP9xTx+8YSTTiDtU1pKcvXaclbpeqzrde2kZaXlc/NjcX3aNr/sfoLg4bflO4K6W3i/j5lBQt26Iv05qR23/6uhPXxQPLob6MmdcmnkmV6HI1KnK4SmW0fYhvhaGoO2uC/B7NA2cOuecx6MSOGZcu/L2mEmW3xHkJaSUC+1k5cVEjF5E+KTK5iEhTEIUuk+1RyfVuaIl0vXF5ecXJvSMpLS8rXrqhEHwf1PP+9+fqp/RjA9F0pK54nlws0wdRzDXwzdffLGT69lOCb3vqRleyzq6Fk59kmn6wM1OeZdIMkdnB608nolde97JVOwKyzr2GeYJRYFQZBOS+I2NcuP09+fCNs32E9vlp+UiiAQl1eKpHZ+Lct6are1Rvt4Xu36aoQgOP/6z+a/GrKP4pVOpr8o543OTJ2S8hdD/XFsXtvawcyu8x0b7ZMaVHLHvTUKkuiaTLfrt3Ox2bZ4HMWOzwea9jo6/f7kXiu/HtM5kSG+XsN6+7CMt587b9TXvObcXW7Ro6EgnU5J9WGetmx/wm7abEvywrh6fZRWDoKcdN+0fc3Va8tZzd1+yrULJWZZXmtjWcdcLghcqZLtXHyHEJX8eRRd5NWGjlFeNvonslGZ/uVQCIKqfSh0iHEQqEFV7KAH8XXq9lEMIL8/2W2NAmVs0g+EMllXOlhMhfd9/ki7dGz9+2MIglxAx2x92zpWvSNI5zvSvKBUN3BvWmEk4uQSd0Q7OQZuf7RSkqvXluuFi6QwApDWE+ZZ9i2UVG5+almbMFI8zK3uzrxBQKzvhGaPzAznsIXpPD9xaqCUQtNmCEx9G1pfkLd8H23rGNosOW9rzA6CUtHE7bRlwkhoXJI3uj/Bxm0mL2DoaEMxnAiuXY1ce9t6/Am6aZt785etf8wtE4qFpV25TTi+QwdBOIfmbXdZCGz0593SY/aj2Nmd1wmwBtmCwLO8z0ObJYHqz+Ml74XpGFcaQBipQZBe3FrnkasLy1XV9xdR+mKs8EYoxH0xyLW3rkc7SUvr0erSUkNrP2edhzVzdOUu2KXn2WiQUn9hh0cih3pEsLbdQM4ehrMeibi+ohTY24HgCgOR7boq30/DcuH9rn3NljLdERyNmJzD6Oi6Xhh5ftS3ZPQJADOcdhBs7EYUu/KhhcD2GK/zrT+Aa+vkgwAAsF8EAQA0jiAAgMbduLq66igUCoXSbuGOAAAaRxAAQOMIAgBoHEEAAI0jCACgcQQBADSOIACAxhEEANA4QxAM36W6/fYk4cu1X3wT1d982r3w84O3Ty6j+um3LwEAjkcNAtfJ775HVfiC7ZdPR+HQh8K9Z91bP91/F2s0PYTCNCwAAMdR/Wio78jjjj7Vfwl3adQ/hEnuS7oBAIdFEABA4yqDQHg0lJg8GkrwaAgATktVEAwfChc6cfd5QWm0398tlIMEAHBY5iAYQqDwyMeHQLaT9yEg/dURAOB4TEEwPM4phIA60vd/gkoIAMDJ0YNAe9yjdvJvust7m/rSB8wAgKNRgsB38kIJwTA8MhKKD4bhbkKoJxgA4CRUfVgMAPjwEAQA0DiCAAAaRxAAQOMIAgBoHEEAAI0jCACgcTeurq46CoVCobRbuCMAgMYRBADQOIIAABpHEABA4wgCAGgcQQAAjSMIAKBxBAEANM4QBMmX0wjfRDb+cprpl9uPv5ym8JWXAICDU4PAdfK7r6kcQmH03cTuqyyjcOhDIf72Mfd9xtH0EArTsAAAHEf1o6G+Iy99zWT/RfalUf8QJvnvQAYAHBJBAACNqwwC4dFQYvJoKMGjIQA4LVVBMHwoXOjE3ecFpdF+f7dQDhIAwGGZg2AIgcIjHx8C2U7eh4D0V0cAgOMxBcHwOKcQAupI3/8JKiEAACdHDwLtcY/ayb/pLu9t6ksfMAMAjkYJAt/JCyUEw/DISCg+GIa7CaGeYACAk1D1YTEA4MNDEABA4wgCAGgcQQAAjSMIAKBxBAEANO7G1dVVR6FQKJR2C3cEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMZd6yC4dfuO/81OWmbOemqtsQ23jlKxyLWzLC+1sW43qG1/EK8fdWeb/XL75srZ43e+IvH83Le521289vMsDMu9PN9t/9bt8y77PVDAHlyLINhdIPaSE+riNqX2QVivtUji+Wn7tNTQ2sf1lt9zpDaW5YK0rZuWyhzv3//uf5vBddRnj7pM9z/wYfHguZ+eoe/sz1/5qQzLvgAra+qOIG6f+z2nZlu5ttbtW5YPSuuJhbr0Z1BaNpDaWJZzrO3mevLjT90PF49mBcK7x3fVDtrSRmNZhyksgJVdqyBwnYlWSuL6dLm4SHLzJZa2cZu0fWm69nfHTedKkJvvSHXpvFAk8fxcm6VcEHz08f3uD3/8U/fy1X/9XIt33cVZ4XGQ5zporY1GX4dtX4C1nUwQWEZCaSeiTcdcXaivWS6I24R1pSWIf3dKbeK6eF4sN21tH7j5ocTi6dyyjlRnXTawtJkjBEEoD7/73nh38Kp7sNmn8iMfSxvN0Mnr26n8/AFYwbULAq1IwnytviRuI7XX6p1cm7S9Nh3UzA/z0p9O7veUVGdd1knblkqtNAhc+eSzz/W7g/7Zv/LhrKWNyhAEq2wHqKcEQTh5h5/hIk1vXftnn9FFPLm1Tf4qI/6riD4ARnWh6BeEa1cj196ynriN1F6rd9I2pRLLTac/g9J0+nuYTn9K0mXjn462rFa/hBQEofzr3//xrQSlD2fDX/us9uHtcGeRPbf5oBhHYgoCdzFsRzL9xbG7fR1CID6xh5N9Fwa22+p93hEEuXptOSduI7XX6h1LGyetyy1n+T2Wm++EOq1NXC9NS8L8XL1TqrOQguD+p/odgf4BruWRjkF/3ZQHN2t8IA3MYQqC8Qg/vjCken9Cb0c2fhSknOCWIEilnYfWmcQdklZS8bw59Y7Uxv2MS5gX0+YHpXZSiYXpdL6TW8aJ50n1sVK9tqxm8hnBt7bPCNx5N7mDTVjaaPR1yNcScAizg2CYlxntT0Y/4ZZ4KNLJXgqCsFxNkdTOj8VtwjbSEsS/x8L8uL20XDzPSaeDJfNz28gt60h1pXWmatddIwTBF19+VfFXQ5a71XjgsxPfCffnbj/wGdpOz2N5HWO2O2dgH2YEQXzCSvX+Isk968z8Y04pCHLSzmNuR2TphGo6qtJ2Ql3605HmOdJ0KBJpfto+16YkrQ/T6c+cUr22rMYFwQ9/q/w/gv5c1P5Kx53v0zb9+WoOAnkdI3xQjCOqDoJ4JCRN5zr6HXnkM1mPwHUWWinJ1WvLOZY2gWU74Xf3My5hXiyd1pTax9tJadtJ68N07mcqN98p1VnM+s9iy4ezhmf7Kss6LPsC7In5w+JtEU7WYXS0K6NOfvIXQ/Kjoem29IvPtauRa29Zz26/bEVTapPWxeu1Fklcl7bJzY/Fdbl2bn6pLqdUty/94EO7C+078SV/25+7Sxgz7QuwJzMeDR1f6GxqO49ce8t6araltS3tRyhLpMvn1hnmSe1jYflc+1SuXpof1qutcx9GA5jCaHzbrrKjVpdLBkmndp2hHdcyCAAA6yEIAKBxShAAAD50BAEANO7G1dVVR6FQKJR2C3cEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMYRBADQOIIAABpHEABA4wgCAGgcQQAAjSMIAKBxBAEANI4gAIDGEQQA0DiCAAAaRxAAQOMIAgBoHEEAAI0jCACgcQQBADSOIACAxhEEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMYRBADQtK77P5qTs31mcPZUAAAAAElFTkSuQmCC",B=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"什么是发布订阅模式?","slug":"什么是发布订阅模式","link":"#什么是发布订阅模式","children":[]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"代码测试","slug":"代码测试","link":"#代码测试","children":[{"level":3,"title":"执行结果如下:","slug":"执行结果如下","link":"#执行结果如下","children":[]},{"level":3,"title":"执行结果如下:解绑的f1函数不再触发,仅触发f2","slug":"执行结果如下-解绑的f1函数不再触发-仅触发f2","link":"#执行结果如下-解绑的f1函数不再触发-仅触发f2","children":[]},{"level":3,"title":"执行结果如下:通过once绑定的事件,仅能触发一次","slug":"执行结果如下-通过once绑定的事件-仅能触发一次","link":"#执行结果如下-通过once绑定的事件-仅能触发一次","children":[]}]}],"relativePath":"JS.TS/设计模式/发布订阅模式.md"}'),c={name:"JS.TS/设计模式/发布订阅模式.md"},r=l('

    什么是发布订阅模式?

    类似addEventListenr 发布-订阅模式里面包含了三个模块,发布者,订阅者和处理中心。这里处理中心相当于报刊办事大厅。 发布者相当与某个杂志负责人,他来中心这注册一个的杂志,而订阅者相当于用户,我在中心订阅了这分杂志。 每当发布者发布了一期杂志,办事大厅就会通知订阅者来拿新杂志。

    代码实现

    Talk is cheap,show you my code

    ts
    // 发布订阅模式
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/assets/发布订阅模式.2138ebfb.jpg",o="/HuaiGu/assets/发布订阅1.a43e67f8.png",t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYMAAABaCAYAAABaIjpBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAnCSURBVHhe7d1PixxFGMfxvI6cDOR9yWJYFPSgBw/eZSGgISj4DiQY2CB6ccVjTkk8+Ro0iR7mote2699MdfVTVU9V9/TsZr8fKMxMV1f/r191z0rfGQAAtx5hAAAgDAAAhAEAYEQYAAAIAwBARxi8d+++/9dcaVpOzzxbW2u71tzWNdpfY33W3KZNvbgY3jv7YXjrP+q8HZ6c3R++fOE/dnFtmP1mS/M63EJ//TCc3bsYXvmPWq8u7g9nT7fYu9Exvfjdf6ehmM9uu68zlmNuT1cYhJKSvkuldWqft2SW3VpywrS4Tql+K6mtlvZzdTVtxHValnltmCC492B48pf/bP0+fDlui9meUKRO/+3TB+O09o7pwCwnXXbs9XB5/v1w9+5Yzp8Pb/y3a3PbMW5nU+d1Ar4znB2LpJMUt0M8zuszobMo1O221NZzjYFIWVMYmJ0exP8OpO9SaZ3edrbUuj5x/dy/lwptmf/mSo5UNy01oY6m7tqe/fjTWH72nxopO4h8p+8uyu4RWmGU++bZ5RgCl8Pln38Mj00YPPrDT1mbCaSL4YnZxut8Z5ILgjRQs/V8R33UwKuFu4aiDVVgLKMOg/iiTzsA8zktkvT7XL1Ti7cjV0ri6el8cemVm7enTWmelnaWbEcvEwbvf/DhcPHw6+Hvv//x32qYi043uirdAdhpnZ2oat4/nw8PxjB43H/7UWTWwYZZ16OyrbSErjuuYl0b/kvu5CoK4a6maePY2zFqvjNIS/he+m8qzKMt69N1Bumya59j8bq3zNdCakfTtqnTWmLS9FI5lhAGpnz0yafDL7/+5qeUqW/nCyNNa8GFqRqpvrrydwj+86qiUaiwHfv1s9P8sYz32X4edy25OsmI1e+//fymhG2W9p3wXSmMZ0rHy0473oh6ycBgz2x/pQ27nKPe4XQ+JtL+t0Zbbz36MKgVSfi+Nn2JePnh36WSk5tWmkeyVjst4jAI5fG33w3//vufryGpHfvoxzzVLbuyo5rQPfd1j4uuhpf+85omnYrQUZowODuLO7hkv9mOa7yziOabBJzt2ONtTEb4mWVOO8OWuwJ/3LKdaRR+R2D3l2o9CxRhsMpyKk4WBpo6U/HFGpU4Lf2JGMrhhIxHMUlRpK2p1yJXv7WdVJhfaqel7dr82rZK9fLTwnHs6UwdKQxM+ezzL3wNgT032kaa2Yuvpa0JXcf08tGxfjxOl5909OKxmdZxI/Z4njgMpE48XUbt86hhNG+XXToWDW3pHfqiyXovEParfM655a21rJxNHxPFwvxSkaSjh8MJ6NkLNDro/oKe7kDhxBNI65SWktz02nxaaTvadk09aV5p/tz3sXh6Wjc/73HC4PE35TuDttt5v46ZgUJbWxF7Tta22/810RF+PJ7cFVhyx1wagabX4YTU8QrBadoIyxD3pTJsi+sSdAe3gmm75zyYkAI0ZY7L2oE2t9qdQVpKwnSpnjyvkIzJgYhPsGAWGMowSKXr1LJ9tdIjni9tLy45uTqleSSl+VvbahGHwYcffzr8clX/zWB+LpSUzhPNxZuh6jzcXxI9ePbaf16L2yZzXNKy35bqKLqy7bOO14dqss2HUJI7uXrYyu1K2o57I1W4V2jaOGagRVYJgyD9LInrtMw/HQX4k2F/kP3ncf5ZaQgDcf5KkbR+30rTTuuy1qgff9faXosQBhcPv1L/NZF+NF/paOyF2TdKU3VMlb8kstsx7tvWAc2hA56arFM1rOTOe28SJtE1mS7XL+fJuGxxO4qdnw+12n407Prk9pVvR3VOZIj7y7VrAzNefu68qe7zlnN3mVUeEwXp55Q0PXxXm9eetGOdfUl2jpleH62VwyAnXbfauuam1+bT6l1+ytQLJaaZv1ZH00YvEwamNMl2ML5TiEr+PIou9Gauc5Tnjf5Hs0mZ/0VRCIOmdSh0inEYVMOq2Ek78XVq1lEMIb8+2WVNQmVq1g+EMmsrHTCmwnHvH3GXts0eH0UY5EI6puvbljvKnUH6vSF9F5SmOebAFUYkRi55J2oniGPWp1ZKctNr81nhQimMBKR2wneadQsllfs+taxOGDEe/7Z3qm8gELMdUfcITXEOa6jO82uuGiql4NRxoVlfRq0vyFu+jro2XJ0l563W4jAolZq4Xm2eMCKaluRg25NsWme2E0NnG4riZDD1WuTq69rxJ+lYN3cCLGt/yswTioamXrlO2L6twyCcQ33LXRYEI3veLd1mP5rt7sCuAW2YLQg9zXF2dZaEqj+PlxwL1TauNIhQUIdBeoHXOpDctDBf03R7IaU7ZIWDUSGui0Kuvrad2olaaqc2LS0tavV72txW5yjLXLRLz7PJQKX94g6PR7Z4XHAMh8GcPhC7Ho+YvqIU2vvB4AqDkX1bjcdTMV843q37bImmO4OTERPUjZJu6sWR50d/S0ahANDoZoTB6DCyOJR3LQj223iTHwMAuJFuTBgAAI6HMAAAEAYAgDEMdrvdQKFQKJTbXbgzAAAQBgAAwgAAMCIMAACEAQCAMAAAjAgDAABhAABoCgP3btb9W5iEF3a/fBRNv3s1vPTfB2+eXUbT529xAgCchjoMTEd/eC+r8NLuV1eTgLDBcP58eOM/23e7Rp9dMMwDAwCwve7HRLYzjzv7lH2xd2n07wIl9+JvAMB2CAMAQG8YCI+JErPHRAkeEwHA9dEVBu6H4kJHbn4/KI367V1DOUwAANtpDgMXBIXHPz4Ish29DwLpr5EAAKfRFAbu0U4hCKojfv/nqQQBAFwr+jCoPfqpdvSvh8vzcXrpR2cAwEkow8B39EIJ4eAeHwnFh4O7qxCmEw4AcHJdPyADAN4thAEAgDAAABAGAIARYQAAIAwAAIQBAGB0Z7fbDRQKhUK53YU7AwAAYQAAIAwAACPCAABAGAAACAMAwIgwAAAQBgCApjBIXnAjvNFs+oKb+Qvzpy+4Kbw+EwCwKXUYmI7+8MpLFwyTdx2b12JGAWGDIX6LmXk/cvTZBcM8MAAA2+t+TGQ789IrK+3L8Uujfxco+XcqAwC2QhgAAHrDQHhMlJg9JkrwmAgAro+uMHA/FBc6cvP7QWnUb+8aymECANhOcxi4ICg8/vFBkO3ofRBIf40EADiNpjBwj3YKQVAd8fs/TyUIAOBa0YdB7dFPtaN/PVyej9NLPzoDAE5CGQa+oxdKCAf3+EgoPhzcXYUwnXAAgJPr+gEZAPBuIQwAAIQBAIAwAACMCAMAwHBnt9sNFAqFQrndhTsDAABhAAAgDAAAI8IAAEAYAAAIAwDAiDAAABAGAADCAAAwIgwAAIQBAIAwAACMCAMAAGEAABiG/wFot9QRdhVeKQAAAABJRU5ErkJggg==",e="data:image/png;base64,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",B=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"什么是发布订阅模式?","slug":"什么是发布订阅模式","link":"#什么是发布订阅模式","children":[]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"代码测试","slug":"代码测试","link":"#代码测试","children":[{"level":3,"title":"执行结果如下:","slug":"执行结果如下","link":"#执行结果如下","children":[]},{"level":3,"title":"执行结果如下:解绑的f1函数不再触发,仅触发f2","slug":"执行结果如下-解绑的f1函数不再触发-仅触发f2","link":"#执行结果如下-解绑的f1函数不再触发-仅触发f2","children":[]},{"level":3,"title":"执行结果如下:通过once绑定的事件,仅能触发一次","slug":"执行结果如下-通过once绑定的事件-仅能触发一次","link":"#执行结果如下-通过once绑定的事件-仅能触发一次","children":[]}]}],"relativePath":"JS.TS/设计模式/发布订阅模式.md"}'),c={name:"JS.TS/设计模式/发布订阅模式.md"},r=l('

    什么是发布订阅模式?

    类似addEventListenr 发布-订阅模式里面包含了三个模块,发布者,订阅者和处理中心。这里处理中心相当于报刊办事大厅。 发布者相当与某个杂志负责人,他来中心这注册一个的杂志,而订阅者相当于用户,我在中心订阅了这分杂志。 每当发布者发布了一期杂志,办事大厅就会通知订阅者来拿新杂志。

    代码实现

    Talk is cheap,show you my code

    ts
    // 发布订阅模式
     // on 监听/订阅
     // emit 执行/发布
     // once 只执行一次
    diff --git "a/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.lean.js" "b/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.lean.js"
    similarity index 99%
    rename from "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.lean.js"
    rename to "assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.lean.js"
    index f02440a..f6479a6 100644
    --- "a/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.eefd5042.lean.js"
    +++ "b/assets/JS.TS_\350\256\276\350\256\241\346\250\241\345\274\217_\345\217\221\345\270\203\350\256\242\351\230\205\346\250\241\345\274\217.md.47d4ba6b.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/assets/发布订阅模式.2138ebfb.jpg",o="/HuaiGu/assets/发布订阅1.a43e67f8.png",t="data:image/png;base64,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",e="data:image/png;base64,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",B=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"什么是发布订阅模式?","slug":"什么是发布订阅模式","link":"#什么是发布订阅模式","children":[]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"代码测试","slug":"代码测试","link":"#代码测试","children":[{"level":3,"title":"执行结果如下:","slug":"执行结果如下","link":"#执行结果如下","children":[]},{"level":3,"title":"执行结果如下:解绑的f1函数不再触发,仅触发f2","slug":"执行结果如下-解绑的f1函数不再触发-仅触发f2","link":"#执行结果如下-解绑的f1函数不再触发-仅触发f2","children":[]},{"level":3,"title":"执行结果如下:通过once绑定的事件,仅能触发一次","slug":"执行结果如下-通过once绑定的事件-仅能触发一次","link":"#执行结果如下-通过once绑定的事件-仅能触发一次","children":[]}]}],"relativePath":"JS.TS/设计模式/发布订阅模式.md"}'),c={name:"JS.TS/设计模式/发布订阅模式.md"},r=l("",15),A=[r];function y(F,D,C,i,d,f){return a(),n("div",null,A)}const g=s(c,[["render",y]]);export{B as __pageData,g as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/assets/发布订阅模式.2138ebfb.jpg",o="/HuaiGu/assets/发布订阅1.a43e67f8.png",t="data:image/png;base64,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",e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYIAAACLCAYAAABsgp71AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA8oSURBVHhe7d3Lih3HHcdxPYdWEui9zGAhZLAXdsABZy0GDIkRNvgJnAwSjDDOxgpZJcpGF7LwM1gXZzEbeds51V11TnX1v+r/r+4+l1F9P1DMdFf17Zzu+lX3meHc6AAATSMIAKBxBAEANI4gAIDGEQQA0DiCAAAaRxAAQOMIAgBonDkIbt2+43+bKtXlzFnm0NY6rjWPdY31r7E/ax7TQT0/726dPere+Umbd93F2Z3uwXM/OcuwDve69aV6Hxr0+lF3dvu8e+knrV6e3+nOHh/i1Y3e0/NXfp6FYbn+2H2bTdn38VQFQSgpaV4qbaNNH5Lbdm3JCXVxm1L7WtK6atafa2tZR9ymZpsnw4XA7bvdxWs/3XvVPdgcizueUKQO/93ju5u6+k5px20n3XbsTXd576/dzZubcu9Z99bPXdtwHJvjrOq4jsB3hJP3IukgxeMQ3+f1ucBZFOj9sWj7ucYgRGcKAveCB/HvgTQvlbaZu55Dqt2fuH3u96XCutzPXMmR2qZFE9pY2q7tyY8/bcrf/VQlY+eQ7/CHC3L2yKwwun375HITAJfd5a+/dA9dEHzzi69Zmwuj8+7CHeMp35HkQiAN02w730nvNey0YLcwrMMUFsupQRBf8OnF76bTIknn59odW3wcuVIS16fLxWWu3LJz1iktU7OeJccxlwuCjz6+351//Zfut9/+5+dauAvONqoqjfz7upkdqGnZX591dzdB8HD+bUeR24c+yGY9HjuUmsAd3lexbR/8S+7gFIVgN7OsY9/H4ZnvCNIS5ks/U2EZa1mfrSNIt61Nx+J9r1muhrQey7pdm9oSk+pLZV9CELjyyWefdz//45++psx8C18YYfYWXJSmEerLp/7OwE+vKhp9Csex3b++zr+X8Wu2XWa4loY2yUjVv37b5V0Jxyy9dsK8UhBPlN6vvm5/I+klg4Itd/zKOvrt7PXOZlD1aMj6U2Nttx57EGhFEuZr9UvE2w+/l0pOrq60jGSt9dSIgyCUh999371//7tvIdHe++iDO9NturGTGrE95x0eET3tXvjpNY06FKGTdEFwdhZ3bsnr1ndamzuKaLlRuPWdenyMycg+s81xR1hzN+Dft2xHGgXfHvSvl2k/CwxBsMp2DA4eBJY2Y/GFGpU4Jf1JGMruZIxHL0kxpKxrVyPXvnY9qbC8tJ6adWvLW9dVapevC+/jnI50IAWBK198+ZVvIejPjboRZvbCq1nXiK1TevHNvj4oTrefdPLiezNuM4zU42XiIJA68HQb2vRGxSi+33bpvahYl92uLxrt9wLhdZXPuWF7a22r5CCPhmJhealI0lHD7uTz+oszesP9xTx+8YSTTiDtU1pKcvXaclbpeqzrde2kZaXlc/NjcX3aNr/sfoLg4bflO4K6W3i/j5lBQt26Iv05qR23/6uhPXxQPLob6MmdcmnkmV6HI1KnK4SmW0fYhvhaGoO2uC/B7NA2cOuecx6MSOGZcu/L2mEmW3xHkJaSUC+1k5cVEjF5E+KTK5iEhTEIUuk+1RyfVuaIl0vXF5ecXJvSMpLS8rXrqhEHwf1PP+9+fqp/RjA9F0pK54nlws0wdRzDXwzdffLGT69lOCb3vqRleyzq6Fk59kmn6wM1OeZdIMkdnB608nolde97JVOwKyzr2GeYJRYFQZBOS+I2NcuP09+fCNs32E9vlp+UiiAQl1eKpHZ+Lct6are1Rvt4Xu36aoQgOP/6z+a/GrKP4pVOpr8o543OTJ2S8hdD/XFsXtvawcyu8x0b7ZMaVHLHvTUKkuiaTLfrt3Ox2bZ4HMWOzwea9jo6/f7kXiu/HtM5kSG+XsN6+7CMt587b9TXvObcXW7Ro6EgnU5J9WGetmx/wm7abEvywrh6fZRWDoKcdN+0fc3Va8tZzd1+yrULJWZZXmtjWcdcLghcqZLtXHyHEJX8eRRd5NWGjlFeNvonslGZ/uVQCIKqfSh0iHEQqEFV7KAH8XXq9lEMIL8/2W2NAmVs0g+EMllXOlhMhfd9/ki7dGz9+2MIglxAx2x92zpWvSNI5zvSvKBUN3BvWmEk4uQSd0Q7OQZuf7RSkqvXluuFi6QwApDWE+ZZ9i2UVG5+almbMFI8zK3uzrxBQKzvhGaPzAznsIXpPD9xaqCUQtNmCEx9G1pfkLd8H23rGNosOW9rzA6CUtHE7bRlwkhoXJI3uj/Bxm0mL2DoaEMxnAiuXY1ce9t6/Am6aZt785etf8wtE4qFpV25TTi+QwdBOIfmbXdZCGz0593SY/aj2Nmd1wmwBtmCwLO8z0ObJYHqz+Ml74XpGFcaQBipQZBe3FrnkasLy1XV9xdR+mKs8EYoxH0xyLW3rkc7SUvr0erSUkNrP2edhzVzdOUu2KXn2WiQUn9hh0cih3pEsLbdQM4ehrMeibi+ohTY24HgCgOR7boq30/DcuH9rn3NljLdERyNmJzD6Oi6Xhh5ftS3ZPQJADOcdhBs7EYUu/KhhcD2GK/zrT+Aa+vkgwAAsF8EAQA0jiAAgMbduLq66igUCoXSbuGOAAAaRxAAQOMIAgBoHEEAAI0jCACgcQQBADSOIACAxhEEANA4QxAM36W6/fYk4cu1X3wT1d982r3w84O3Ty6j+um3LwEAjkcNAtfJ775HVfiC7ZdPR+HQh8K9Z91bP91/F2s0PYTCNCwAAMdR/Wio78jjjj7Vfwl3adQ/hEnuS7oBAIdFEABA4yqDQHg0lJg8GkrwaAgATktVEAwfChc6cfd5QWm0398tlIMEAHBY5iAYQqDwyMeHQLaT9yEg/dURAOB4TEEwPM4phIA60vd/gkoIAMDJ0YNAe9yjdvJvust7m/rSB8wAgKNRgsB38kIJwTA8MhKKD4bhbkKoJxgA4CRUfVgMAPjwEAQA0DiCAAAaRxAAQOMIAgBoHEEAAI0jCACgcTeurq46CoVCobRbuCMAgMYRBADQOIIAABpHEABA4wgCAGgcQQAAjSMIAKBxBAEANM4QBMmX0wjfRDb+cprpl9uPv5ym8JWXAICDU4PAdfK7r6kcQmH03cTuqyyjcOhDIf72Mfd9xtH0EArTsAAAHEf1o6G+Iy99zWT/RfalUf8QJvnvQAYAHBJBAACNqwwC4dFQYvJoKMGjIQA4LVVBMHwoXOjE3ecFpdF+f7dQDhIAwGGZg2AIgcIjHx8C2U7eh4D0V0cAgOMxBcHwOKcQAupI3/8JKiEAACdHDwLtcY/ayb/pLu9t6ksfMAMAjkYJAt/JCyUEw/DISCg+GIa7CaGeYACAk1D1YTEA4MNDEABA4wgCAGgcQQAAjSMIAKBxBAEANO7G1dVVR6FQKJR2C3cEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMZd6yC4dfuO/81OWmbOemqtsQ23jlKxyLWzLC+1sW43qG1/EK8fdWeb/XL75srZ43e+IvH83Le521289vMsDMu9PN9t/9bt8y77PVDAHlyLINhdIPaSE+riNqX2QVivtUji+Wn7tNTQ2sf1lt9zpDaW5YK0rZuWyhzv3//uf5vBddRnj7pM9z/wYfHguZ+eoe/sz1/5qQzLvgAra+qOIG6f+z2nZlu5ttbtW5YPSuuJhbr0Z1BaNpDaWJZzrO3mevLjT90PF49mBcK7x3fVDtrSRmNZhyksgJVdqyBwnYlWSuL6dLm4SHLzJZa2cZu0fWm69nfHTedKkJvvSHXpvFAk8fxcm6VcEHz08f3uD3/8U/fy1X/9XIt33cVZ4XGQ5zporY1GX4dtX4C1nUwQWEZCaSeiTcdcXaivWS6I24R1pSWIf3dKbeK6eF4sN21tH7j5ocTi6dyyjlRnXTawtJkjBEEoD7/73nh38Kp7sNmn8iMfSxvN0Mnr26n8/AFYwbULAq1IwnytviRuI7XX6p1cm7S9Nh3UzA/z0p9O7veUVGdd1knblkqtNAhc+eSzz/W7g/7Zv/LhrKWNyhAEq2wHqKcEQTh5h5/hIk1vXftnn9FFPLm1Tf4qI/6riD4ARnWh6BeEa1cj196ynriN1F6rd9I2pRLLTac/g9J0+nuYTn9K0mXjn462rFa/hBQEofzr3//xrQSlD2fDX/us9uHtcGeRPbf5oBhHYgoCdzFsRzL9xbG7fR1CID6xh5N9Fwa22+p93hEEuXptOSduI7XX6h1LGyetyy1n+T2Wm++EOq1NXC9NS8L8XL1TqrOQguD+p/odgf4BruWRjkF/3ZQHN2t8IA3MYQqC8Qg/vjCken9Cb0c2fhSknOCWIEilnYfWmcQdklZS8bw59Y7Uxv2MS5gX0+YHpXZSiYXpdL6TW8aJ50n1sVK9tqxm8hnBt7bPCNx5N7mDTVjaaPR1yNcScAizg2CYlxntT0Y/4ZZ4KNLJXgqCsFxNkdTOj8VtwjbSEsS/x8L8uL20XDzPSaeDJfNz28gt60h1pXWmatddIwTBF19+VfFXQ5a71XjgsxPfCffnbj/wGdpOz2N5HWO2O2dgH2YEQXzCSvX+Isk968z8Y04pCHLSzmNuR2TphGo6qtJ2Ql3605HmOdJ0KBJpfto+16YkrQ/T6c+cUr22rMYFwQ9/q/w/gv5c1P5Kx53v0zb9+WoOAnkdI3xQjCOqDoJ4JCRN5zr6HXnkM1mPwHUWWinJ1WvLOZY2gWU74Xf3My5hXiyd1pTax9tJadtJ68N07mcqN98p1VnM+s9iy4ezhmf7Kss6LPsC7In5w+JtEU7WYXS0K6NOfvIXQ/Kjoem29IvPtauRa29Zz26/bEVTapPWxeu1Fklcl7bJzY/Fdbl2bn6pLqdUty/94EO7C+078SV/25+7Sxgz7QuwJzMeDR1f6GxqO49ce8t6araltS3tRyhLpMvn1hnmSe1jYflc+1SuXpof1qutcx9GA5jCaHzbrrKjVpdLBkmndp2hHdcyCAAA6yEIAKBxShAAAD50BAEANO7G1dVVR6FQKJR2C3cEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMYRBADQOIIAABpHEABA4wgCAGgcQQAAjSMIAKBxBAEANI4gAIDGEQQA0DiCAAAaRxAAQOMIAgBoHEEAAI0jCACgcQQBADSOIACAxhEEANA4ggAAGkcQAEDjCAIAaBxBAACNIwgAoHEEAQA0jiAAgMYRBADQtK77P5qTs31mcPZUAAAAAElFTkSuQmCC",B=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"什么是发布订阅模式?","slug":"什么是发布订阅模式","link":"#什么是发布订阅模式","children":[]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"代码测试","slug":"代码测试","link":"#代码测试","children":[{"level":3,"title":"执行结果如下:","slug":"执行结果如下","link":"#执行结果如下","children":[]},{"level":3,"title":"执行结果如下:解绑的f1函数不再触发,仅触发f2","slug":"执行结果如下-解绑的f1函数不再触发-仅触发f2","link":"#执行结果如下-解绑的f1函数不再触发-仅触发f2","children":[]},{"level":3,"title":"执行结果如下:通过once绑定的事件,仅能触发一次","slug":"执行结果如下-通过once绑定的事件-仅能触发一次","link":"#执行结果如下-通过once绑定的事件-仅能触发一次","children":[]}]}],"relativePath":"JS.TS/设计模式/发布订阅模式.md"}'),c={name:"JS.TS/设计模式/发布订阅模式.md"},r=l("",15),A=[r];function y(F,D,C,i,d,f){return a(),n("div",null,A)}const g=s(c,[["render",y]]);export{B as __pageData,g as default};
    diff --git a/assets/React_ReactHooks_useCallback.md.1c584b49.js b/assets/React_ReactHooks_useCallback.md.d5247b8b.js
    similarity index 94%
    rename from assets/React_ReactHooks_useCallback.md.1c584b49.js
    rename to assets/React_ReactHooks_useCallback.md.d5247b8b.js
    index 87bcd3c..e8a1355 100644
    --- a/assets/React_ReactHooks_useCallback.md.1c584b49.js
    +++ b/assets/React_ReactHooks_useCallback.md.d5247b8b.js
    @@ -1,3 +1,3 @@
    -import{_ as a,c as s,o as e,a as n}from"./app.3e0f3fbc.js";const h=JSON.parse('{"title":"useCallback","description":"","frontmatter":{},"headers":[],"relativePath":"React/ReactHooks/useCallback.md"}'),c={name:"React/ReactHooks/useCallback.md"},l=n(`

    useCallback

    jsx
    
    +import{_ as a,c as s,o as e,a as n}from"./app.ec03d301.js";const h=JSON.parse('{"title":"useCallback","description":"","frontmatter":{},"headers":[],"relativePath":"React/ReactHooks/useCallback.md"}'),c={name:"React/ReactHooks/useCallback.md"},l=n(`

    useCallback

    jsx
    
     const cachedFn = useCallback(fn, dependencies)
     
    `,2),t=[l];function o(p,r,i,_,d,C){return e(),s("div",null,t)}const A=a(c,[["render",o]]);export{h as __pageData,A as default}; diff --git a/assets/React_ReactHooks_useCallback.md.1c584b49.lean.js b/assets/React_ReactHooks_useCallback.md.d5247b8b.lean.js similarity index 83% rename from assets/React_ReactHooks_useCallback.md.1c584b49.lean.js rename to assets/React_ReactHooks_useCallback.md.d5247b8b.lean.js index b95fd44..030e469 100644 --- a/assets/React_ReactHooks_useCallback.md.1c584b49.lean.js +++ b/assets/React_ReactHooks_useCallback.md.d5247b8b.lean.js @@ -1 +1 @@ -import{_ as a,c as s,o as e,a as n}from"./app.3e0f3fbc.js";const h=JSON.parse('{"title":"useCallback","description":"","frontmatter":{},"headers":[],"relativePath":"React/ReactHooks/useCallback.md"}'),c={name:"React/ReactHooks/useCallback.md"},l=n("",2),t=[l];function o(p,r,i,_,d,C){return e(),s("div",null,t)}const A=a(c,[["render",o]]);export{h as __pageData,A as default}; +import{_ as a,c as s,o as e,a as n}from"./app.ec03d301.js";const h=JSON.parse('{"title":"useCallback","description":"","frontmatter":{},"headers":[],"relativePath":"React/ReactHooks/useCallback.md"}'),c={name:"React/ReactHooks/useCallback.md"},l=n("",2),t=[l];function o(p,r,i,_,d,C){return e(),s("div",null,t)}const A=a(c,[["render",o]]);export{h as __pageData,A as default}; diff --git a/assets/React_ReactHooks_useContext.md.5c073e00.js b/assets/React_ReactHooks_useContext.md.df92c0c5.js similarity index 97% rename from assets/React_ReactHooks_useContext.md.5c073e00.js rename to assets/React_ReactHooks_useContext.md.df92c0c5.js index 9b98cd7..5b46659 100644 --- a/assets/React_ReactHooks_useContext.md.5c073e00.js +++ b/assets/React_ReactHooks_useContext.md.df92c0c5.js @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as e}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useContext","slug":"usecontext","link":"#usecontext","children":[]}],"relativePath":"React/ReactHooks/useContext.md"}'),o={name:"React/ReactHooks/useContext.md"},t=e(`

    useContext

    类似于vue 中的Provider

    jsx
    const ThemeContext = createContext(null);
    +import{_ as s,c as n,o as a,a as e}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useContext","slug":"usecontext","link":"#usecontext","children":[]}],"relativePath":"React/ReactHooks/useContext.md"}'),o={name:"React/ReactHooks/useContext.md"},t=e(`

    useContext

    类似于vue 中的Provider

    jsx
    const ThemeContext = createContext(null);
     
         <ThemeContext.Provider value="dark">
           <Form />
    diff --git a/assets/React_ReactHooks_useContext.md.5c073e00.lean.js b/assets/React_ReactHooks_useContext.md.df92c0c5.lean.js
    similarity index 85%
    rename from assets/React_ReactHooks_useContext.md.5c073e00.lean.js
    rename to assets/React_ReactHooks_useContext.md.df92c0c5.lean.js
    index f770568..d8207b1 100644
    --- a/assets/React_ReactHooks_useContext.md.5c073e00.lean.js
    +++ b/assets/React_ReactHooks_useContext.md.df92c0c5.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as e}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useContext","slug":"usecontext","link":"#usecontext","children":[]}],"relativePath":"React/ReactHooks/useContext.md"}'),o={name:"React/ReactHooks/useContext.md"},t=e("",3),l=[t];function p(c,r,C,D,F,i){return a(),n("div",null,l)}const d=s(o,[["render",p]]);export{A as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as e}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useContext","slug":"usecontext","link":"#usecontext","children":[]}],"relativePath":"React/ReactHooks/useContext.md"}'),o={name:"React/ReactHooks/useContext.md"},t=e("",3),l=[t];function p(c,r,C,D,F,i){return a(),n("div",null,l)}const d=s(o,[["render",p]]);export{A as __pageData,d as default};
    diff --git a/assets/React_ReactHooks_useEffect.md.f1bef51f.js b/assets/React_ReactHooks_useEffect.md.7227bbed.js
    similarity index 89%
    rename from assets/React_ReactHooks_useEffect.md.f1bef51f.js
    rename to assets/React_ReactHooks_useEffect.md.7227bbed.js
    index 517102e..9d040a6 100644
    --- a/assets/React_ReactHooks_useEffect.md.f1bef51f.js
    +++ b/assets/React_ReactHooks_useEffect.md.7227bbed.js
    @@ -1 +1 @@
    -import{_ as t,c as s,o as c,b as e,d as a}from"./app.3e0f3fbc.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useEffect","slug":"useeffect","link":"#useeffect","children":[]}],"relativePath":"React/ReactHooks/useEffect.md"}'),o={name:"React/ReactHooks/useEffect.md"},f=e("h2",{id:"useeffect",tabindex:"-1"},[a("useEffect "),e("a",{class:"header-anchor",href:"#useeffect","aria-hidden":"true"},"#")],-1),r=e("p",null,"注意Effect和返回值即可",-1),n=[f,r];function d(i,l,u,_,h,p){return c(),s("div",null,n)}const k=t(o,[["render",d]]);export{E as __pageData,k as default};
    +import{_ as t,c as s,o as c,b as e,d as a}from"./app.ec03d301.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useEffect","slug":"useeffect","link":"#useeffect","children":[]}],"relativePath":"React/ReactHooks/useEffect.md"}'),o={name:"React/ReactHooks/useEffect.md"},f=e("h2",{id:"useeffect",tabindex:"-1"},[a("useEffect "),e("a",{class:"header-anchor",href:"#useeffect","aria-hidden":"true"},"#")],-1),r=e("p",null,"注意Effect和返回值即可",-1),n=[f,r];function d(i,l,u,_,h,p){return c(),s("div",null,n)}const k=t(o,[["render",d]]);export{E as __pageData,k as default};
    diff --git a/assets/React_ReactHooks_useEffect.md.f1bef51f.lean.js b/assets/React_ReactHooks_useEffect.md.7227bbed.lean.js
    similarity index 89%
    rename from assets/React_ReactHooks_useEffect.md.f1bef51f.lean.js
    rename to assets/React_ReactHooks_useEffect.md.7227bbed.lean.js
    index 517102e..9d040a6 100644
    --- a/assets/React_ReactHooks_useEffect.md.f1bef51f.lean.js
    +++ b/assets/React_ReactHooks_useEffect.md.7227bbed.lean.js
    @@ -1 +1 @@
    -import{_ as t,c as s,o as c,b as e,d as a}from"./app.3e0f3fbc.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useEffect","slug":"useeffect","link":"#useeffect","children":[]}],"relativePath":"React/ReactHooks/useEffect.md"}'),o={name:"React/ReactHooks/useEffect.md"},f=e("h2",{id:"useeffect",tabindex:"-1"},[a("useEffect "),e("a",{class:"header-anchor",href:"#useeffect","aria-hidden":"true"},"#")],-1),r=e("p",null,"注意Effect和返回值即可",-1),n=[f,r];function d(i,l,u,_,h,p){return c(),s("div",null,n)}const k=t(o,[["render",d]]);export{E as __pageData,k as default};
    +import{_ as t,c as s,o as c,b as e,d as a}from"./app.ec03d301.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useEffect","slug":"useeffect","link":"#useeffect","children":[]}],"relativePath":"React/ReactHooks/useEffect.md"}'),o={name:"React/ReactHooks/useEffect.md"},f=e("h2",{id:"useeffect",tabindex:"-1"},[a("useEffect "),e("a",{class:"header-anchor",href:"#useeffect","aria-hidden":"true"},"#")],-1),r=e("p",null,"注意Effect和返回值即可",-1),n=[f,r];function d(i,l,u,_,h,p){return c(),s("div",null,n)}const k=t(o,[["render",d]]);export{E as __pageData,k as default};
    diff --git a/assets/React_ReactHooks_useRef.md.7892ba92.js b/assets/React_ReactHooks_useRef.md.ad056e1f.js
    similarity index 99%
    rename from assets/React_ReactHooks_useRef.md.7892ba92.js
    rename to assets/React_ReactHooks_useRef.md.ad056e1f.js
    index fa1e66e..d8f784d 100644
    --- a/assets/React_ReactHooks_useRef.md.7892ba92.js
    +++ b/assets/React_ReactHooks_useRef.md.ad056e1f.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useRef","slug":"useref","link":"#useref","children":[]},{"level":2,"title":"使用 ref 操作 DOM","slug":"使用-ref-操作-dom","link":"#使用-ref-操作-dom","children":[]},{"level":2,"title":"初始化 ref","slug":"初始化-ref","link":"#初始化-ref","children":[]},{"level":2,"title":"当想获得组件的引用时","slug":"当想获得组件的引用时","link":"#当想获得组件的引用时","children":[]}],"relativePath":"React/ReactHooks/useRef.md"}'),e={name:"React/ReactHooks/useRef.md"},p=l(`

    useRef

    useRef 更改引用后不会引发重新渲染

    jsx
    const ref = useRef(0);
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useRef","slug":"useref","link":"#useref","children":[]},{"level":2,"title":"使用 ref 操作 DOM","slug":"使用-ref-操作-dom","link":"#使用-ref-操作-dom","children":[]},{"level":2,"title":"初始化 ref","slug":"初始化-ref","link":"#初始化-ref","children":[]},{"level":2,"title":"当想获得组件的引用时","slug":"当想获得组件的引用时","link":"#当想获得组件的引用时","children":[]}],"relativePath":"React/ReactHooks/useRef.md"}'),e={name:"React/ReactHooks/useRef.md"},p=l(`

    useRef

    useRef 更改引用后不会引发重新渲染

    jsx
    const ref = useRef(0);
     console.log(ref);
     return (
       <>
    diff --git a/assets/React_ReactHooks_useRef.md.7892ba92.lean.js b/assets/React_ReactHooks_useRef.md.ad056e1f.lean.js
    similarity index 91%
    rename from assets/React_ReactHooks_useRef.md.7892ba92.lean.js
    rename to assets/React_ReactHooks_useRef.md.ad056e1f.lean.js
    index 781f198..0da8153 100644
    --- a/assets/React_ReactHooks_useRef.md.7892ba92.lean.js
    +++ b/assets/React_ReactHooks_useRef.md.ad056e1f.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useRef","slug":"useref","link":"#useref","children":[]},{"level":2,"title":"使用 ref 操作 DOM","slug":"使用-ref-操作-dom","link":"#使用-ref-操作-dom","children":[]},{"level":2,"title":"初始化 ref","slug":"初始化-ref","link":"#初始化-ref","children":[]},{"level":2,"title":"当想获得组件的引用时","slug":"当想获得组件的引用时","link":"#当想获得组件的引用时","children":[]}],"relativePath":"React/ReactHooks/useRef.md"}'),e={name:"React/ReactHooks/useRef.md"},p=l("",9),o=[p];function t(r,c,F,y,D,i){return n(),a("div",null,o)}const d=s(e,[["render",t]]);export{C as __pageData,d as default};
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useRef","slug":"useref","link":"#useref","children":[]},{"level":2,"title":"使用 ref 操作 DOM","slug":"使用-ref-操作-dom","link":"#使用-ref-操作-dom","children":[]},{"level":2,"title":"初始化 ref","slug":"初始化-ref","link":"#初始化-ref","children":[]},{"level":2,"title":"当想获得组件的引用时","slug":"当想获得组件的引用时","link":"#当想获得组件的引用时","children":[]}],"relativePath":"React/ReactHooks/useRef.md"}'),e={name:"React/ReactHooks/useRef.md"},p=l("",9),o=[p];function t(r,c,F,y,D,i){return n(),a("div",null,o)}const d=s(e,[["render",t]]);export{C as __pageData,d as default};
    diff --git a/assets/React_ReactHooks_useState.md.1ac2cd38.js b/assets/React_ReactHooks_useState.md.ed1ad237.js
    similarity index 99%
    rename from assets/React_ReactHooks_useState.md.1ac2cd38.js
    rename to assets/React_ReactHooks_useState.md.ed1ad237.js
    index 72e0ac8..bc421e5 100644
    --- a/assets/React_ReactHooks_useState.md.1ac2cd38.js
    +++ b/assets/React_ReactHooks_useState.md.ed1ad237.js
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useState","slug":"usestate","link":"#usestate","children":[]},{"level":2,"title":"setNum","slug":"setnum","link":"#setnum","children":[{"level":3,"title":"当 num 为对象时,应该去替换对象","slug":"当-num-为对象时-应该去替换对象","link":"#当-num-为对象时-应该去替换对象","children":[]},{"level":3,"title":"初始值可以为函数也可以为值","slug":"初始值可以为函数也可以为值","link":"#初始值可以为函数也可以为值","children":[]},{"level":3,"title":"使用 key 重置","slug":"使用-key-重置","link":"#使用-key-重置","children":[]}]}],"relativePath":"React/ReactHooks/useState.md"}'),p={name:"React/ReactHooks/useState.md"},o=l(`

    useState

    实际上就是为你的组件创建数据的状态,传入的参数为该数据的初始状态

    WARNING

    严格模式下 react 会 render 两次已确认组件是纯函数

    js
    const initNum = 0;
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useState","slug":"usestate","link":"#usestate","children":[]},{"level":2,"title":"setNum","slug":"setnum","link":"#setnum","children":[{"level":3,"title":"当 num 为对象时,应该去替换对象","slug":"当-num-为对象时-应该去替换对象","link":"#当-num-为对象时-应该去替换对象","children":[]},{"level":3,"title":"初始值可以为函数也可以为值","slug":"初始值可以为函数也可以为值","link":"#初始值可以为函数也可以为值","children":[]},{"level":3,"title":"使用 key 重置","slug":"使用-key-重置","link":"#使用-key-重置","children":[]}]}],"relativePath":"React/ReactHooks/useState.md"}'),p={name:"React/ReactHooks/useState.md"},o=l(`

    useState

    实际上就是为你的组件创建数据的状态,传入的参数为该数据的初始状态

    WARNING

    严格模式下 react 会 render 两次已确认组件是纯函数

    js
    const initNum = 0;
     const [num, setNum] = useState(initNum); // 解构
     

    setNum

    纯函数,且没有返回值

    当 num 为对象时,应该去替换对象

    js
    const [me, setMe] = useState({
       name: "zyh",
    diff --git a/assets/React_ReactHooks_useState.md.1ac2cd38.lean.js b/assets/React_ReactHooks_useState.md.ed1ad237.lean.js
    similarity index 93%
    rename from assets/React_ReactHooks_useState.md.1ac2cd38.lean.js
    rename to assets/React_ReactHooks_useState.md.ed1ad237.lean.js
    index 974f21f..620a811 100644
    --- a/assets/React_ReactHooks_useState.md.1ac2cd38.lean.js
    +++ b/assets/React_ReactHooks_useState.md.ed1ad237.lean.js
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useState","slug":"usestate","link":"#usestate","children":[]},{"level":2,"title":"setNum","slug":"setnum","link":"#setnum","children":[{"level":3,"title":"当 num 为对象时,应该去替换对象","slug":"当-num-为对象时-应该去替换对象","link":"#当-num-为对象时-应该去替换对象","children":[]},{"level":3,"title":"初始值可以为函数也可以为值","slug":"初始值可以为函数也可以为值","link":"#初始值可以为函数也可以为值","children":[]},{"level":3,"title":"使用 key 重置","slug":"使用-key-重置","link":"#使用-key-重置","children":[]}]}],"relativePath":"React/ReactHooks/useState.md"}'),p={name:"React/ReactHooks/useState.md"},o=l("",14),e=[o];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"useState","slug":"usestate","link":"#usestate","children":[]},{"level":2,"title":"setNum","slug":"setnum","link":"#setnum","children":[{"level":3,"title":"当 num 为对象时,应该去替换对象","slug":"当-num-为对象时-应该去替换对象","link":"#当-num-为对象时-应该去替换对象","children":[]},{"level":3,"title":"初始值可以为函数也可以为值","slug":"初始值可以为函数也可以为值","link":"#初始值可以为函数也可以为值","children":[]},{"level":3,"title":"使用 key 重置","slug":"使用-key-重置","link":"#使用-key-重置","children":[]}]}],"relativePath":"React/ReactHooks/useState.md"}'),p={name:"React/ReactHooks/useState.md"},o=l("",14),e=[o];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
    diff --git a/assets/React_index.md.1ce8f0d9.js b/assets/React_index.md.aef465cd.js
    similarity index 86%
    rename from assets/React_index.md.1ce8f0d9.js
    rename to assets/React_index.md.aef465cd.js
    index 015f600..a8405c4 100644
    --- a/assets/React_index.md.1ce8f0d9.js
    +++ b/assets/React_index.md.aef465cd.js
    @@ -1 +1 @@
    -import{_ as t,c as a,o as n,b as e}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[]}],"relativePath":"React/index.md"}'),r={name:"React/index.md"},s=e("h2",{id:"",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#","aria-hidden":"true"},"#")],-1),c=[s];function o(d,i,l,_,h,p){return n(),a("div",null,c)}const u=t(r,[["render",o]]);export{m as __pageData,u as default};
    +import{_ as t,c as a,o as n,b as e}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[]}],"relativePath":"React/index.md"}'),r={name:"React/index.md"},s=e("h2",{id:"",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#","aria-hidden":"true"},"#")],-1),c=[s];function o(d,i,l,_,h,p){return n(),a("div",null,c)}const u=t(r,[["render",o]]);export{m as __pageData,u as default};
    diff --git a/assets/React_index.md.1ce8f0d9.lean.js b/assets/React_index.md.aef465cd.lean.js
    similarity index 86%
    rename from assets/React_index.md.1ce8f0d9.lean.js
    rename to assets/React_index.md.aef465cd.lean.js
    index 015f600..a8405c4 100644
    --- a/assets/React_index.md.1ce8f0d9.lean.js
    +++ b/assets/React_index.md.aef465cd.lean.js
    @@ -1 +1 @@
    -import{_ as t,c as a,o as n,b as e}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[]}],"relativePath":"React/index.md"}'),r={name:"React/index.md"},s=e("h2",{id:"",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#","aria-hidden":"true"},"#")],-1),c=[s];function o(d,i,l,_,h,p){return n(),a("div",null,c)}const u=t(r,[["render",o]]);export{m as __pageData,u as default};
    +import{_ as t,c as a,o as n,b as e}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"","slug":"","link":"#","children":[]}],"relativePath":"React/index.md"}'),r={name:"React/index.md"},s=e("h2",{id:"",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#","aria-hidden":"true"},"#")],-1),c=[s];function o(d,i,l,_,h,p){return n(),a("div",null,c)}const u=t(r,[["render",o]]);export{m as __pageData,u as default};
    diff --git a/assets/React_redux.md.a7cc0ec6.js b/assets/React_redux.md.786f58cd.js
    similarity index 78%
    rename from assets/React_redux.md.a7cc0ec6.js
    rename to assets/React_redux.md.786f58cd.js
    index e80c260..1b3d4e2 100644
    --- a/assets/React_redux.md.a7cc0ec6.js
    +++ b/assets/React_redux.md.786f58cd.js
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"React/redux.md"}'),r={name:"React/redux.md"};function c(o,s,n,d,p,_){return a(),t("div")}const f=e(r,[["render",c]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"React/redux.md"}'),r={name:"React/redux.md"};function c(o,s,n,d,p,_){return a(),t("div")}const f=e(r,[["render",c]]);export{m as __pageData,f as default};
    diff --git a/assets/React_redux.md.a7cc0ec6.lean.js b/assets/React_redux.md.786f58cd.lean.js
    similarity index 78%
    rename from assets/React_redux.md.a7cc0ec6.lean.js
    rename to assets/React_redux.md.786f58cd.lean.js
    index e80c260..1b3d4e2 100644
    --- a/assets/React_redux.md.a7cc0ec6.lean.js
    +++ b/assets/React_redux.md.786f58cd.lean.js
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"React/redux.md"}'),r={name:"React/redux.md"};function c(o,s,n,d,p,_){return a(),t("div")}const f=e(r,[["render",c]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"React/redux.md"}'),r={name:"React/redux.md"};function c(o,s,n,d,p,_){return a(),t("div")}const f=e(r,[["render",c]]);export{m as __pageData,f as default};
    diff --git a/assets/Vue_CSS_scroll.md.42176bcb.js b/assets/Vue_CSS_scroll.md.1ed7720c.js
    similarity index 91%
    rename from assets/Vue_CSS_scroll.md.42176bcb.js
    rename to assets/Vue_CSS_scroll.md.1ed7720c.js
    index da4b9ed..9f5c0ba 100644
    --- a/assets/Vue_CSS_scroll.md.42176bcb.js
    +++ b/assets/Vue_CSS_scroll.md.1ed7720c.js
    @@ -1 +1 @@
    -import{_ as t,c as r,o as a,b as e,d as s}from"./app.3e0f3fbc.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"滚动条样式的修改","slug":"滚动条样式的修改","link":"#滚动条样式的修改","children":[]}],"relativePath":"Vue/CSS/scroll.md"}'),o={name:"Vue/CSS/scroll.md"},n=e("h2",{id:"滚动条样式的修改",tabindex:"-1"},[s("滚动条样式的修改 "),e("a",{class:"header-anchor",href:"#滚动条样式的修改","aria-hidden":"true"},"#")],-1),c=e("p",null,[e("a",{href:"https://juejin.cn/post/6997011443967066143#heading-8",target:"_blank",rel:"noreferrer"},"here")],-1),l=[n,c];function d(i,_,h,p,u,f){return a(),r("div",null,l)}const S=t(o,[["render",d]]);export{x as __pageData,S as default};
    +import{_ as t,c as r,o as a,b as e,d as s}from"./app.ec03d301.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"滚动条样式的修改","slug":"滚动条样式的修改","link":"#滚动条样式的修改","children":[]}],"relativePath":"Vue/CSS/scroll.md"}'),o={name:"Vue/CSS/scroll.md"},n=e("h2",{id:"滚动条样式的修改",tabindex:"-1"},[s("滚动条样式的修改 "),e("a",{class:"header-anchor",href:"#滚动条样式的修改","aria-hidden":"true"},"#")],-1),c=e("p",null,[e("a",{href:"https://juejin.cn/post/6997011443967066143#heading-8",target:"_blank",rel:"noreferrer"},"here")],-1),l=[n,c];function d(i,_,h,p,u,f){return a(),r("div",null,l)}const S=t(o,[["render",d]]);export{x as __pageData,S as default};
    diff --git a/assets/Vue_CSS_scroll.md.42176bcb.lean.js b/assets/Vue_CSS_scroll.md.1ed7720c.lean.js
    similarity index 91%
    rename from assets/Vue_CSS_scroll.md.42176bcb.lean.js
    rename to assets/Vue_CSS_scroll.md.1ed7720c.lean.js
    index da4b9ed..9f5c0ba 100644
    --- a/assets/Vue_CSS_scroll.md.42176bcb.lean.js
    +++ b/assets/Vue_CSS_scroll.md.1ed7720c.lean.js
    @@ -1 +1 @@
    -import{_ as t,c as r,o as a,b as e,d as s}from"./app.3e0f3fbc.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"滚动条样式的修改","slug":"滚动条样式的修改","link":"#滚动条样式的修改","children":[]}],"relativePath":"Vue/CSS/scroll.md"}'),o={name:"Vue/CSS/scroll.md"},n=e("h2",{id:"滚动条样式的修改",tabindex:"-1"},[s("滚动条样式的修改 "),e("a",{class:"header-anchor",href:"#滚动条样式的修改","aria-hidden":"true"},"#")],-1),c=e("p",null,[e("a",{href:"https://juejin.cn/post/6997011443967066143#heading-8",target:"_blank",rel:"noreferrer"},"here")],-1),l=[n,c];function d(i,_,h,p,u,f){return a(),r("div",null,l)}const S=t(o,[["render",d]]);export{x as __pageData,S as default};
    +import{_ as t,c as r,o as a,b as e,d as s}from"./app.ec03d301.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"滚动条样式的修改","slug":"滚动条样式的修改","link":"#滚动条样式的修改","children":[]}],"relativePath":"Vue/CSS/scroll.md"}'),o={name:"Vue/CSS/scroll.md"},n=e("h2",{id:"滚动条样式的修改",tabindex:"-1"},[s("滚动条样式的修改 "),e("a",{class:"header-anchor",href:"#滚动条样式的修改","aria-hidden":"true"},"#")],-1),c=e("p",null,[e("a",{href:"https://juejin.cn/post/6997011443967066143#heading-8",target:"_blank",rel:"noreferrer"},"here")],-1),l=[n,c];function d(i,_,h,p,u,f){return a(),r("div",null,l)}const S=t(o,[["render",d]]);export{x as __pageData,S as default};
    diff --git "a/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.js" "b/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.js"
    similarity index 99%
    rename from "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.js"
    rename to "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.js"
    index 5a6e9f0..2999b3e 100644
    --- "a/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.js"
    +++ "b/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"数据驱动视图","description":"","frontmatter":{},"headers":[{"level":3,"title":"VNode 抽象语法树","slug":"vnode-抽象语法树","link":"#vnode-抽象语法树","children":[]}],"relativePath":"Vue/源码分析/VNode与diff算法.md"}'),p={name:"Vue/源码分析/VNode与diff算法.md"},o=l(`

    数据驱动视图

    众所周知,Vue通过数据绑定来修改视图,当某个数据被修改的时候,set方法会让闭包中的Dep调用notify通知所有订阅者Watcher,Watcher通过get方法执行vm._update(vm._render(), hydrating)。

    JavaScript
    Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"数据驱动视图","description":"","frontmatter":{},"headers":[{"level":3,"title":"VNode 抽象语法树","slug":"vnode-抽象语法树","link":"#vnode-抽象语法树","children":[]}],"relativePath":"Vue/源码分析/VNode与diff算法.md"}'),p={name:"Vue/源码分析/VNode与diff算法.md"},o=l(`

    数据驱动视图

    众所周知,Vue通过数据绑定来修改视图,当某个数据被修改的时候,set方法会让闭包中的Dep调用notify通知所有订阅者Watcher,Watcher通过get方法执行vm._update(vm._render(), hydrating)。

    JavaScript
    Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
         const vm: Component = this
         /*如果已经该组件已经挂载过了则代表进入这个步骤是个更新的过程,触发beforeUpdate钩子*/
         if (vm._isMounted) {
    diff --git "a/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.lean.js" "b/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.lean.js"
    similarity index 87%
    rename from "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.lean.js"
    rename to "assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.lean.js"
    index 0339c82..012b344 100644
    --- "a/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.6847b478.lean.js"
    +++ "b/assets/Vue_\346\272\220\347\240\201\345\210\206\346\236\220_VNode\344\270\216diff\347\256\227\346\263\225.md.45840d87.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"数据驱动视图","description":"","frontmatter":{},"headers":[{"level":3,"title":"VNode 抽象语法树","slug":"vnode-抽象语法树","link":"#vnode-抽象语法树","children":[]}],"relativePath":"Vue/源码分析/VNode与diff算法.md"}'),p={name:"Vue/源码分析/VNode与diff算法.md"},o=l("",9),e=[o];function t(c,r,y,F,D,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"数据驱动视图","description":"","frontmatter":{},"headers":[{"level":3,"title":"VNode 抽象语法树","slug":"vnode-抽象语法树","link":"#vnode-抽象语法树","children":[]}],"relativePath":"Vue/源码分析/VNode与diff算法.md"}'),p={name:"Vue/源码分析/VNode与diff算法.md"},o=l("",9),e=[o];function t(c,r,y,F,D,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.js"
    similarity index 99%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.js"
    index e59eae6..211c25d 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const t="/HuaiGu/abc透传.png",p="/HuaiGu/Hover.png",o="/HuaiGu/el-title.png",h=JSON.parse('{"title":"attrs/listeners","description":"","frontmatter":{},"headers":[{"level":2,"title":"一、$attrs介绍","slug":"一、-attrs介绍","link":"#一、-attrs介绍","children":[{"level":3,"title":"使用场景:  A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)","slug":"使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","link":"#使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","children":[]}]},{"level":2,"title":"二、$listeners介绍","slug":"二、-listeners介绍","link":"#二、-listeners介绍","children":[]},{"level":2,"title":"三、attrs和listeners的使用场景","slug":"三、attrs和listeners的使用场景","link":"#三、attrs和listeners的使用场景","children":[{"level":3,"title":"需求:对element-ui的button组件实现增加鼠标悬停提示","slug":"需求-对element-ui的button组件实现增加鼠标悬停提示","link":"#需求-对element-ui的button组件实现增加鼠标悬停提示","children":[]},{"level":3,"title":"效果实现","slug":"效果实现","link":"#效果实现","children":[]},{"level":3,"title":"log打印","slug":"log打印","link":"#log打印","children":[]}]}],"relativePath":"Vue/组件通信/Api-attrs.md"}'),e={name:"Vue/组件通信/Api-attrs.md"},r=l('

    attrs/listeners

    一、$attrs介绍

    • 当项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。
    • 了解:如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
    • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, inheritAttrs: false是不会影响 style 和 class 的绑定

    使用场景: A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)

    alt

    二、$listeners介绍

    $listeners属性,它是一个对象,里面包含了作用在这个组件上的所有监听器,你就可以配合 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。(相当于子组件继承父组件的事件)

    三、attrs和listeners的使用场景

    TIP

    $attrs/$listeners一般用于对组件的二次封装,实现功能扩展

    需求:对element-ui的button组件实现增加鼠标悬停提示

    HintButton为el-button的二次封装

    vue
    <template>
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const t="/HuaiGu/abc透传.png",p="/HuaiGu/Hover.png",o="/HuaiGu/el-title.png",h=JSON.parse('{"title":"attrs/listeners","description":"","frontmatter":{},"headers":[{"level":2,"title":"一、$attrs介绍","slug":"一、-attrs介绍","link":"#一、-attrs介绍","children":[{"level":3,"title":"使用场景:  A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)","slug":"使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","link":"#使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","children":[]}]},{"level":2,"title":"二、$listeners介绍","slug":"二、-listeners介绍","link":"#二、-listeners介绍","children":[]},{"level":2,"title":"三、attrs和listeners的使用场景","slug":"三、attrs和listeners的使用场景","link":"#三、attrs和listeners的使用场景","children":[{"level":3,"title":"需求:对element-ui的button组件实现增加鼠标悬停提示","slug":"需求-对element-ui的button组件实现增加鼠标悬停提示","link":"#需求-对element-ui的button组件实现增加鼠标悬停提示","children":[]},{"level":3,"title":"效果实现","slug":"效果实现","link":"#效果实现","children":[]},{"level":3,"title":"log打印","slug":"log打印","link":"#log打印","children":[]}]}],"relativePath":"Vue/组件通信/Api-attrs.md"}'),e={name:"Vue/组件通信/Api-attrs.md"},r=l('

    attrs/listeners

    一、$attrs介绍

    • 当项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。
    • 了解:如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
    • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, inheritAttrs: false是不会影响 style 和 class 的绑定

    使用场景: A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)

    alt

    二、$listeners介绍

    $listeners属性,它是一个对象,里面包含了作用在这个组件上的所有监听器,你就可以配合 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。(相当于子组件继承父组件的事件)

    三、attrs和listeners的使用场景

    TIP

    $attrs/$listeners一般用于对组件的二次封装,实现功能扩展

    需求:对element-ui的button组件实现增加鼠标悬停提示

    HintButton为el-button的二次封装

    vue
    <template>
       <div>
         <h2>自定义带Hover提示的按钮</h2>
         <!-- 二次封装的HintButton按钮的时候,把el-button需要的数据传递过去 -->
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.lean.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.lean.js"
    similarity index 95%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.lean.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.lean.js"
    index 8197237..e289835 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.ff5d9ade.lean.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-attrs.md.f1a7c08c.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const t="/HuaiGu/abc透传.png",p="/HuaiGu/Hover.png",o="/HuaiGu/el-title.png",h=JSON.parse('{"title":"attrs/listeners","description":"","frontmatter":{},"headers":[{"level":2,"title":"一、$attrs介绍","slug":"一、-attrs介绍","link":"#一、-attrs介绍","children":[{"level":3,"title":"使用场景:  A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)","slug":"使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","link":"#使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","children":[]}]},{"level":2,"title":"二、$listeners介绍","slug":"二、-listeners介绍","link":"#二、-listeners介绍","children":[]},{"level":2,"title":"三、attrs和listeners的使用场景","slug":"三、attrs和listeners的使用场景","link":"#三、attrs和listeners的使用场景","children":[{"level":3,"title":"需求:对element-ui的button组件实现增加鼠标悬停提示","slug":"需求-对element-ui的button组件实现增加鼠标悬停提示","link":"#需求-对element-ui的button组件实现增加鼠标悬停提示","children":[]},{"level":3,"title":"效果实现","slug":"效果实现","link":"#效果实现","children":[]},{"level":3,"title":"log打印","slug":"log打印","link":"#log打印","children":[]}]}],"relativePath":"Vue/组件通信/Api-attrs.md"}'),e={name:"Vue/组件通信/Api-attrs.md"},r=l("",18),c=[r];function D(F,i,y,C,A,d){return a(),n("div",null,c)}const g=s(e,[["render",D]]);export{h as __pageData,g as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const t="/HuaiGu/abc透传.png",p="/HuaiGu/Hover.png",o="/HuaiGu/el-title.png",h=JSON.parse('{"title":"attrs/listeners","description":"","frontmatter":{},"headers":[{"level":2,"title":"一、$attrs介绍","slug":"一、-attrs介绍","link":"#一、-attrs介绍","children":[{"level":3,"title":"使用场景:  A 组件与 C 组件之间的通信: (跨多级的组件嵌套关系)","slug":"使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","link":"#使用场景-a-组件与-c-组件之间的通信-跨多级的组件嵌套关系","children":[]}]},{"level":2,"title":"二、$listeners介绍","slug":"二、-listeners介绍","link":"#二、-listeners介绍","children":[]},{"level":2,"title":"三、attrs和listeners的使用场景","slug":"三、attrs和listeners的使用场景","link":"#三、attrs和listeners的使用场景","children":[{"level":3,"title":"需求:对element-ui的button组件实现增加鼠标悬停提示","slug":"需求-对element-ui的button组件实现增加鼠标悬停提示","link":"#需求-对element-ui的button组件实现增加鼠标悬停提示","children":[]},{"level":3,"title":"效果实现","slug":"效果实现","link":"#效果实现","children":[]},{"level":3,"title":"log打印","slug":"log打印","link":"#log打印","children":[]}]}],"relativePath":"Vue/组件通信/Api-attrs.md"}'),e={name:"Vue/组件通信/Api-attrs.md"},r=l("",18),c=[r];function D(F,i,y,C,A,d){return a(),n("div",null,c)}const g=s(e,[["render",D]]);export{h as __pageData,g as default};
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.js"
    similarity index 99%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.js"
    index e8c5b20..61a6f51 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"$parent/$children 与 ref","description":"","frontmatter":{},"headers":[{"level":3,"title":"在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网","slug":"在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","link":"#在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","children":[]},{"level":2,"title":"再此重点介绍$parent/$children的使用","slug":"再此重点介绍-parent-children的使用","link":"#再此重点介绍-parent-children的使用","children":[]}],"relativePath":"Vue/组件通信/Api-parent.md"}'),p={name:"Vue/组件通信/Api-parent.md"},o=l(`

    $parent/$children 与 ref

    在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网

    DANGER

    $refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

    再此重点介绍$parent/$children的使用

    1. 使用this.$refs.paramsName能更快的获取操作子组件属性值或函数

    使用$children[i].paramsName 来获取某个子组件的属性值或函数,$children返回的是一个子组件数组

    html
    <template>
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"$parent/$children 与 ref","description":"","frontmatter":{},"headers":[{"level":3,"title":"在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网","slug":"在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","link":"#在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","children":[]},{"level":2,"title":"再此重点介绍$parent/$children的使用","slug":"再此重点介绍-parent-children的使用","link":"#再此重点介绍-parent-children的使用","children":[]}],"relativePath":"Vue/组件通信/Api-parent.md"}'),p={name:"Vue/组件通信/Api-parent.md"},o=l(`

    $parent/$children 与 ref

    在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网

    DANGER

    $refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

    再此重点介绍$parent/$children的使用

    1. 使用this.$refs.paramsName能更快的获取操作子组件属性值或函数

    使用$children[i].paramsName 来获取某个子组件的属性值或函数,$children返回的是一个子组件数组

    html
    <template>
         <div class="parent">
             <Childone></Childone>
             <Childtwo></Childtwo>
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.lean.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.lean.js"
    similarity index 92%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.lean.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.lean.js"
    index 7bb5ba9..fc3b9f1 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.9f3dbee6.lean.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-parent.md.1745ecf3.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"$parent/$children 与 ref","description":"","frontmatter":{},"headers":[{"level":3,"title":"在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网","slug":"在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","link":"#在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","children":[]},{"level":2,"title":"再此重点介绍$parent/$children的使用","slug":"再此重点介绍-parent-children的使用","link":"#再此重点介绍-parent-children的使用","children":[]}],"relativePath":"Vue/组件通信/Api-parent.md"}'),p={name:"Vue/组件通信/Api-parent.md"},o=l("",10),t=[o];function e(c,r,D,F,y,i){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{A as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"$parent/$children 与 ref","description":"","frontmatter":{},"headers":[{"level":3,"title":"在DOM元素或组件上使用refs属性可以迅速进行dom定位,详细使用请见官网","slug":"在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","link":"#在dom元素或组件上使用refs属性可以迅速进行dom定位-详细使用请见官网","children":[]},{"level":2,"title":"再此重点介绍$parent/$children的使用","slug":"再此重点介绍-parent-children的使用","link":"#再此重点介绍-parent-children的使用","children":[]}],"relativePath":"Vue/组件通信/Api-parent.md"}'),p={name:"Vue/组件通信/Api-parent.md"},o=l("",10),t=[o];function e(c,r,D,F,y,i){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{A as __pageData,d as default};
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.js"
    similarity index 99%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.js"
    index 53593ee..5b04d4e 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"props/$emit","description":"","frontmatter":{},"headers":[{"level":3,"title":"1.1props配置项","slug":"_1-1props配置项","link":"#_1-1props配置项","children":[]},{"level":3,"title":"1.2关于props的注意","slug":"_1-2关于props的注意","link":"#_1-2关于props的注意","children":[]},{"level":2,"title":"2.组件自定义事件","slug":"_2-组件自定义事件","link":"#_2-组件自定义事件","children":[]}],"relativePath":"Vue/组件通信/Api-props.md"}'),p={name:"Vue/组件通信/Api-props.md"},o=l(`

    props/$emit

    1.1props配置项

    1. 功能:让组件接收外部传过来的数据
    2. 传递数据:<Demo name="xxx"/>
    3. 接收数据:
      • 第一种方式(只接收):props:['name']
      • 第二种方式(限制类型):props:{name:String}
      • 第三种方式(限制类型、限制必要性、指定默认值):
    js
    props:{
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"props/$emit","description":"","frontmatter":{},"headers":[{"level":3,"title":"1.1props配置项","slug":"_1-1props配置项","link":"#_1-1props配置项","children":[]},{"level":3,"title":"1.2关于props的注意","slug":"_1-2关于props的注意","link":"#_1-2关于props的注意","children":[]},{"level":2,"title":"2.组件自定义事件","slug":"_2-组件自定义事件","link":"#_2-组件自定义事件","children":[]}],"relativePath":"Vue/组件通信/Api-props.md"}'),p={name:"Vue/组件通信/Api-props.md"},o=l(`

    props/$emit

    1.1props配置项

    1. 功能:让组件接收外部传过来的数据
    2. 传递数据:<Demo name="xxx"/>
    3. 接收数据:
      • 第一种方式(只接收):props:['name']
      • 第二种方式(限制类型):props:{name:String}
      • 第三种方式(限制类型、限制必要性、指定默认值):
    js
    props:{
     	name:{
     	type:String, //类型
     	required:true, //必要性
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.lean.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.lean.js"
    similarity index 91%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.lean.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.lean.js"
    index 47cd8a2..744543c 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.63359098.lean.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-props.md.ae661645.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"props/$emit","description":"","frontmatter":{},"headers":[{"level":3,"title":"1.1props配置项","slug":"_1-1props配置项","link":"#_1-1props配置项","children":[]},{"level":3,"title":"1.2关于props的注意","slug":"_1-2关于props的注意","link":"#_1-2关于props的注意","children":[]},{"level":2,"title":"2.组件自定义事件","slug":"_2-组件自定义事件","link":"#_2-组件自定义事件","children":[]}],"relativePath":"Vue/组件通信/Api-props.md"}'),p={name:"Vue/组件通信/Api-props.md"},o=l("",13),t=[o];function e(c,r,F,y,D,i){return a(),n("div",null,t)}const A=s(p,[["render",e]]);export{C as __pageData,A as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"props/$emit","description":"","frontmatter":{},"headers":[{"level":3,"title":"1.1props配置项","slug":"_1-1props配置项","link":"#_1-1props配置项","children":[]},{"level":3,"title":"1.2关于props的注意","slug":"_1-2关于props的注意","link":"#_1-2关于props的注意","children":[]},{"level":2,"title":"2.组件自定义事件","slug":"_2-组件自定义事件","link":"#_2-组件自定义事件","children":[]}],"relativePath":"Vue/组件通信/Api-props.md"}'),p={name:"Vue/组件通信/Api-props.md"},o=l("",13),t=[o];function e(c,r,F,y,D,i){return a(),n("div",null,t)}const A=s(p,[["render",e]]);export{C as __pageData,A as default};
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.js"
    similarity index 99%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.js"
    index 5bef3ca..d78a68b 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"provide/inject","description":"","frontmatter":{},"headers":[{"level":2,"title":"使用前言","slug":"使用前言","link":"#使用前言","children":[]},{"level":2,"title":"基本知识","slug":"基本知识","link":"#基本知识","children":[]},{"level":2,"title":"一、Vue2 的 provide / inject 使用","slug":"一、vue2-的-provide-inject-使用","link":"#一、vue2-的-provide-inject-使用","children":[]}],"relativePath":"Vue/组件通信/Api-provide.md"}'),p={name:"Vue/组件通信/Api-provide.md"},o=l(`

    provide/inject

    使用前言

    在父子组件传递数据时,通常使用的是 props 和 emit。当父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。

    像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。

    注意:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

    基本知识

    provide :一个对象或返回一个对象的函数

    inject :一个字符串数组,或 一个对象,对象的 [key] 是本地的绑定名

    一、Vue2 的 provide / inject 使用

    1. 用provide :是一个对象,里面是属性和值。如:
    js
    provide:{
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"provide/inject","description":"","frontmatter":{},"headers":[{"level":2,"title":"使用前言","slug":"使用前言","link":"#使用前言","children":[]},{"level":2,"title":"基本知识","slug":"基本知识","link":"#基本知识","children":[]},{"level":2,"title":"一、Vue2 的 provide / inject 使用","slug":"一、vue2-的-provide-inject-使用","link":"#一、vue2-的-provide-inject-使用","children":[]}],"relativePath":"Vue/组件通信/Api-provide.md"}'),p={name:"Vue/组件通信/Api-provide.md"},o=l(`

    provide/inject

    使用前言

    在父子组件传递数据时,通常使用的是 props 和 emit。当父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。

    像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。

    注意:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

    基本知识

    provide :一个对象或返回一个对象的函数

    inject :一个字符串数组,或 一个对象,对象的 [key] 是本地的绑定名

    一、Vue2 的 provide / inject 使用

    1. 用provide :是一个对象,里面是属性和值。如:
    js
    provide:{
       info:""
     }
     
    1. 如果 provide 需要使用 data 内的数据时,这样写就会报错。访问组件实例 property 时,需要将 provide 转换为返回对象的函数。
    js
    provide(){
    diff --git "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.lean.js" "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.lean.js"
    similarity index 91%
    rename from "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.lean.js"
    rename to "assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.lean.js"
    index 654f62e..ad43e5a 100644
    --- "a/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.064caa0b.lean.js"
    +++ "b/assets/Vue_\347\273\204\344\273\266\351\200\232\344\277\241_Api-provide.md.687988b1.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"provide/inject","description":"","frontmatter":{},"headers":[{"level":2,"title":"使用前言","slug":"使用前言","link":"#使用前言","children":[]},{"level":2,"title":"基本知识","slug":"基本知识","link":"#基本知识","children":[]},{"level":2,"title":"一、Vue2 的 provide / inject 使用","slug":"一、vue2-的-provide-inject-使用","link":"#一、vue2-的-provide-inject-使用","children":[]}],"relativePath":"Vue/组件通信/Api-provide.md"}'),p={name:"Vue/组件通信/Api-provide.md"},o=l("",31),e=[o];function c(t,r,D,y,F,i){return a(),n("div",null,e)}const d=s(p,[["render",c]]);export{A as __pageData,d as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"provide/inject","description":"","frontmatter":{},"headers":[{"level":2,"title":"使用前言","slug":"使用前言","link":"#使用前言","children":[]},{"level":2,"title":"基本知识","slug":"基本知识","link":"#基本知识","children":[]},{"level":2,"title":"一、Vue2 的 provide / inject 使用","slug":"一、vue2-的-provide-inject-使用","link":"#一、vue2-的-provide-inject-使用","children":[]}],"relativePath":"Vue/组件通信/Api-provide.md"}'),p={name:"Vue/组件通信/Api-provide.md"},o=l("",31),e=[o];function c(t,r,D,y,F,i){return a(),n("div",null,e)}const d=s(p,[["render",c]]);export{A as __pageData,d as default};
    diff --git a/assets/app.3e0f3fbc.js b/assets/app.ec03d301.js
    similarity index 83%
    rename from assets/app.3e0f3fbc.js
    rename to assets/app.ec03d301.js
    index db43d94..3bef16d 100644
    --- a/assets/app.3e0f3fbc.js
    +++ b/assets/app.ec03d301.js
    @@ -1,4 +1,4 @@
    -function Os(e,t){const n=Object.create(null),s=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}function zn(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(Vr);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function de(e){let t="";if(xe(e))t=e;else if(K(e))for(let n=0;nxe(e)?e:e==null?"":K(e)||ve(e)&&(e.toString===mi||!Q(e.toString))?JSON.stringify(e,hi,2):String(e),hi=(e,t)=>t&&t.__v_isRef?hi(e,t.value):Ot(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o])=>(n[`${s} =>`]=o,n),{})}:_i(t)?{[`Set(${t.size})`]:[...t.values()]}:ve(t)&&!K(t)&&!vi(t)?String(t):t,ge={},Nt=[],qe=()=>{},Ir=()=>!1,Nr=/^on[^a-z]/,pn=e=>Nr.test(e),Bs=e=>e.startsWith("onUpdate:"),we=Object.assign,Hs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Or=Object.prototype.hasOwnProperty,ie=(e,t)=>Or.call(e,t),K=Array.isArray,Ot=e=>Un(e)==="[object Map]",_i=e=>Un(e)==="[object Set]",Q=e=>typeof e=="function",xe=e=>typeof e=="string",Fs=e=>typeof e=="symbol",ve=e=>e!==null&&typeof e=="object",pi=e=>ve(e)&&Q(e.then)&&Q(e.catch),mi=Object.prototype.toString,Un=e=>mi.call(e),Br=e=>Un(e).slice(8,-1),vi=e=>Un(e)==="[object Object]",Rs=e=>xe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tn=Os(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),jn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Hr=/-(\w)/g,tt=jn(e=>e.replace(Hr,(t,n)=>n?n.toUpperCase():"")),Fr=/\B([A-Z])/g,Wt=jn(e=>e.replace(Fr,"-$1").toLowerCase()),Kn=jn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cs=jn(e=>e?`on${Kn(e)}`:""),cn=(e,t)=>!Object.is(e,t),as=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Ds=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let bo;const Rr=()=>bo||(bo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Ie;class Dr{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Ie,!t&&Ie&&(this.index=(Ie.scopes||(Ie.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Ie;try{return Ie=this,t()}finally{Ie=n}}}on(){Ie=this}off(){Ie=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},gi=e=>(e.w&ht)>0,bi=e=>(e.n&ht)>0,Kr=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(h==="length"||h>=c)&&l.push(f)})}else switch(n!==void 0&&l.push(r.get(n)),t){case"add":K(e)?Rs(n)&&l.push(r.get("length")):(l.push(r.get(Ct)),Ot(e)&&l.push(r.get(xs)));break;case"delete":K(e)||(l.push(r.get(Ct)),Ot(e)&&l.push(r.get(xs)));break;case"set":Ot(e)&&l.push(r.get(Ct));break}if(l.length===1)l[0]&&ks(l[0]);else{const c=[];for(const f of l)f&&c.push(...f);ks(zs(c))}}function ks(e,t){const n=K(e)?e:[...e];for(const s of n)s.computed&&xo(s);for(const s of n)s.computed||xo(s)}function xo(e,t){(e!==je||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Jr=Os("__proto__,__v_isRef,__isVue"),ki=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Fs)),Wr=js(),Gr=js(!1,!0),Yr=js(!0),ko=Qr();function Qr(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=ce(this);for(let i=0,r=this.length;i{e[t]=function(...n){Gt();const s=ce(this)[t].apply(this,n);return Yt(),s}}),e}function js(e=!1,t=!1){return function(s,o,i){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&i===(e?t?hl:Ci:t?Si:Pi).get(s))return s;const r=K(s);if(!e&&r&&ie(ko,o))return Reflect.get(ko,o,i);const l=Reflect.get(s,o,i);return(Fs(o)?ki.has(o):Jr(o))||(e||Be(s,"get",o),t)?l:Pe(l)?r&&Rs(o)?l:l.value:ve(l)?e?Js(l):Jn(l):l}}const Xr=wi(),Zr=wi(!0);function wi(e=!1){return function(n,s,o,i){let r=n[s];if(jt(r)&&Pe(r)&&!Pe(o))return!1;if(!e&&(!Ln(o)&&!jt(o)&&(r=ce(r),o=ce(o)),!K(n)&&Pe(r)&&!Pe(o)))return r.value=o,!0;const l=K(n)&&Rs(s)?Number(s)e,qn=e=>Reflect.getPrototypeOf(e);function bn(e,t,n=!1,s=!1){e=e.__v_raw;const o=ce(e),i=ce(t);n||(t!==i&&Be(o,"get",t),Be(o,"get",i));const{has:r}=qn(o),l=s?Ks:n?Gs:an;if(r.call(o,t))return l(e.get(t));if(r.call(o,i))return l(e.get(i));e!==o&&e.get(t)}function yn(e,t=!1){const n=this.__v_raw,s=ce(n),o=ce(e);return t||(e!==o&&Be(s,"has",e),Be(s,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function xn(e,t=!1){return e=e.__v_raw,!t&&Be(ce(e),"iterate",Ct),Reflect.get(e,"size",e)}function wo(e){e=ce(e);const t=ce(this);return qn(t).has.call(t,e)||(t.add(e),ot(t,"add",e,e)),this}function $o(e,t){t=ce(t);const n=ce(this),{has:s,get:o}=qn(n);let i=s.call(n,e);i||(e=ce(e),i=s.call(n,e));const r=o.call(n,e);return n.set(e,t),i?cn(t,r)&&ot(n,"set",e,t):ot(n,"add",e,t),this}function Po(e){const t=ce(this),{has:n,get:s}=qn(t);let o=n.call(t,e);o||(e=ce(e),o=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return o&&ot(t,"delete",e,void 0),i}function So(){const e=ce(this),t=e.size!==0,n=e.clear();return t&&ot(e,"clear",void 0,void 0),n}function kn(e,t){return function(s,o){const i=this,r=i.__v_raw,l=ce(r),c=t?Ks:e?Gs:an;return!e&&Be(l,"iterate",Ct),r.forEach((f,h)=>s.call(o,c(f),c(h),i))}}function wn(e,t,n){return function(...s){const o=this.__v_raw,i=ce(o),r=Ot(i),l=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,f=o[e](...s),h=n?Ks:t?Gs:an;return!t&&Be(i,"iterate",c?xs:Ct),{next(){const{value:p,done:g}=f.next();return g?{value:p,done:g}:{value:l?[h(p[0]),h(p[1])]:h(p),done:g}},[Symbol.iterator](){return this}}}}function rt(e){return function(...t){return e==="delete"?!1:this}}function il(){const e={get(i){return bn(this,i)},get size(){return xn(this)},has:yn,add:wo,set:$o,delete:Po,clear:So,forEach:kn(!1,!1)},t={get(i){return bn(this,i,!1,!0)},get size(){return xn(this)},has:yn,add:wo,set:$o,delete:Po,clear:So,forEach:kn(!1,!0)},n={get(i){return bn(this,i,!0)},get size(){return xn(this,!0)},has(i){return yn.call(this,i,!0)},add:rt("add"),set:rt("set"),delete:rt("delete"),clear:rt("clear"),forEach:kn(!0,!1)},s={get(i){return bn(this,i,!0,!0)},get size(){return xn(this,!0)},has(i){return yn.call(this,i,!0)},add:rt("add"),set:rt("set"),delete:rt("delete"),clear:rt("clear"),forEach:kn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=wn(i,!1,!1),n[i]=wn(i,!0,!1),t[i]=wn(i,!1,!0),s[i]=wn(i,!0,!0)}),[e,n,t,s]}const[rl,ll,cl,al]=il();function qs(e,t){const n=t?e?al:cl:e?ll:rl;return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(ie(n,o)&&o in s?n:s,o,i)}const ul={get:qs(!1,!1)},fl={get:qs(!1,!0)},dl={get:qs(!0,!1)},Pi=new WeakMap,Si=new WeakMap,Ci=new WeakMap,hl=new WeakMap;function _l(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pl(e){return e.__v_skip||!Object.isExtensible(e)?0:_l(Br(e))}function Jn(e){return jt(e)?e:Ws(e,!1,$i,ul,Pi)}function ml(e){return Ws(e,!1,ol,fl,Si)}function Js(e){return Ws(e,!0,sl,dl,Ci)}function Ws(e,t,n,s,o){if(!ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const r=pl(e);if(r===0)return e;const l=new Proxy(e,r===2?s:n);return o.set(e,l),l}function Bt(e){return jt(e)?Bt(e.__v_raw):!!(e&&e.__v_isReactive)}function jt(e){return!!(e&&e.__v_isReadonly)}function Ln(e){return!!(e&&e.__v_isShallow)}function Ti(e){return Bt(e)||jt(e)}function ce(e){const t=e&&e.__v_raw;return t?ce(t):e}function nn(e){return En(e,"__v_skip",!0),e}const an=e=>ve(e)?Jn(e):e,Gs=e=>ve(e)?Js(e):e;function Vi(e){ft&&je&&(e=ce(e),xi(e.dep||(e.dep=zs())))}function Ei(e,t){e=ce(e),e.dep&&ks(e.dep)}function Pe(e){return!!(e&&e.__v_isRef===!0)}function _e(e){return Li(e,!1)}function vl(e){return Li(e,!0)}function Li(e,t){return Pe(e)?e:new gl(e,t)}class gl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ce(t),this._value=n?t:an(t)}get value(){return Vi(this),this._value}set value(t){const n=this.__v_isShallow||Ln(t)||jt(t);t=n?t:ce(t),cn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:an(t),Ei(this))}}function _(e){return Pe(e)?e.value:e}const bl={get:(e,t,n)=>_(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Pe(o)&&!Pe(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Mi(e){return Bt(e)?e:new Proxy(e,bl)}var Ai;class yl{constructor(t,n,s,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ai]=!1,this._dirty=!0,this.effect=new Us(t,()=>{this._dirty||(this._dirty=!0,Ei(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const t=ce(this);return Vi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ai="__v_isReadonly";function xl(e,t,n=!1){let s,o;const i=Q(e);return i?(s=e,o=qe):(s=e.get,o=e.set),new yl(s,o,i||!o,n)}function dt(e,t,n,s){let o;try{o=s?e(...s):e()}catch(i){Wn(i,t,n)}return o}function Re(e,t,n,s){if(Q(e)){const i=dt(e,t,n,s);return i&&pi(i)&&i.catch(r=>{Wn(r,t,n)}),i}const o=[];for(let i=0;i>>1;fn($e[s])Ze&&$e.splice(t,1)}function Pl(e){K(e)?Ht.push(...e):(!st||!st.includes(e,e.allowRecurse?wt+1:wt))&&Ht.push(e),Ni()}function Co(e,t=un?Ze+1:0){for(;t<$e.length;t++){const n=$e[t];n&&n.pre&&($e.splice(t,1),t--,n())}}function Mn(e){if(Ht.length){const t=[...new Set(Ht)];if(Ht.length=0,st){st.push(...t);return}for(st=t,st.sort((n,s)=>fn(n)-fn(s)),wt=0;wte.id==null?1/0:e.id,Sl=(e,t)=>{const n=fn(e)-fn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Oi(e){ws=!1,un=!0,$e.sort(Sl);const t=qe;try{for(Ze=0;Ze<$e.length;Ze++){const n=$e[Ze];n&&n.active!==!1&&dt(n,null,14)}}finally{Ze=0,$e.length=0,Mn(),un=!1,Ys=null,($e.length||Ht.length)&&Oi()}}function Cl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ge;let o=n;const i=t.startsWith("update:"),r=i&&t.slice(7);if(r&&r in s){const h=`${r==="modelValue"?"model":r}Modifiers`,{number:p,trim:g}=s[h]||ge;g&&(o=n.map($=>xe($)?$.trim():$)),p&&(o=n.map(Ds))}let l,c=s[l=cs(t)]||s[l=cs(tt(t))];!c&&i&&(c=s[l=cs(Wt(t))]),c&&Re(c,e,6,o);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(f,e,6,o)}}function Bi(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let r={},l=!1;if(!Q(e)){const c=f=>{const h=Bi(f,t,!0);h&&(l=!0,we(r,h))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ve(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>r[c]=null):we(r,i),ve(e)&&s.set(e,r),r)}function Gn(e,t){return!e||!pn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Wt(t))||ie(e,t))}let Se=null,Yn=null;function An(e){const t=Se;return Se=e,Yn=e&&e.type.__scopeId||null,t}function Je(e){Yn=e}function We(){Yn=null}function A(e,t=Se,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Bo(-1);const i=An(t);let r;try{r=e(...o)}finally{An(i),s._d&&Bo(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function us(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:i,propsOptions:[r],slots:l,attrs:c,emit:f,render:h,renderCache:p,data:g,setupState:$,ctx:j,inheritAttrs:H}=e;let se,k;const E=An(e);try{if(n.shapeFlag&4){const W=o||s;se=Ue(h.call(W,W,p,i,$,g,j)),k=c}else{const W=t;se=Ue(W.length>1?W(i,{attrs:c,slots:l,emit:f}):W(i,null)),k=t.props?c:Tl(c)}}catch(W){on.length=0,Wn(W,e,1),se=V(Oe)}let I=se;if(k&&H!==!1){const W=Object.keys(k),{shapeFlag:Z}=I;W.length&&Z&7&&(r&&W.some(Bs)&&(k=Vl(k,r)),I=_t(I,k))}return n.dirs&&(I=_t(I),I.dirs=I.dirs?I.dirs.concat(n.dirs):n.dirs),n.transition&&(I.transition=n.transition),se=I,An(E),se}const Tl=e=>{let t;for(const n in e)(n==="class"||n==="style"||pn(n))&&((t||(t={}))[n]=e[n]);return t},Vl=(e,t)=>{const n={};for(const s in e)(!Bs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function El(e,t,n){const{props:s,children:o,component:i}=e,{props:r,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?To(s,r,f):!!r;if(c&8){const h=t.dynamicProps;for(let p=0;pe.__isSuspense;function Hi(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Pl(e)}function Ft(e,t){if(ke){let n=ke.provides;const s=ke.parent&&ke.parent.provides;s===n&&(n=ke.provides=Object.create(s)),n[e]=t}}function Ne(e,t,n=!1){const s=ke||Se;if(s){const o=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&Q(t)?t.call(s.proxy):t}}function Vt(e,t){return Qn(e,null,t)}function Fi(e,t){return Qn(e,null,{flush:"post"})}const $n={};function et(e,t,n){return Qn(e,t,n)}function Qn(e,t,{immediate:n,deep:s,flush:o,onTrack:i,onTrigger:r}=ge){const l=ke;let c,f=!1,h=!1;if(Pe(e)?(c=()=>e.value,f=Ln(e)):Bt(e)?(c=()=>e,s=!0):K(e)?(h=!0,f=e.some(I=>Bt(I)||Ln(I)),c=()=>e.map(I=>{if(Pe(I))return I.value;if(Bt(I))return It(I);if(Q(I))return dt(I,l,2)})):Q(e)?t?c=()=>dt(e,l,2):c=()=>{if(!(l&&l.isUnmounted))return p&&p(),Re(e,l,3,[g])}:c=qe,t&&s){const I=c;c=()=>It(I())}let p,g=I=>{p=k.onStop=()=>{dt(I,l,4)}},$;if(hn)if(g=qe,t?n&&Re(t,l,3,[c(),h?[]:void 0,g]):c(),o==="sync"){const I=$c();$=I.__watcherHandles||(I.__watcherHandles=[])}else return qe;let j=h?new Array(e.length).fill($n):$n;const H=()=>{if(k.active)if(t){const I=k.run();(s||f||(h?I.some((W,Z)=>cn(W,j[Z])):cn(I,j)))&&(p&&p(),Re(t,l,3,[I,j===$n?void 0:h&&j[0]===$n?[]:j,g]),j=I)}else k.run()};H.allowRecurse=!!t;let se;o==="sync"?se=H:o==="post"?se=()=>Le(H,l&&l.suspense):(H.pre=!0,l&&(H.id=l.uid),se=()=>Xs(H));const k=new Us(c,se);t?n?H():j=k.run():o==="post"?Le(k.run.bind(k),l&&l.suspense):k.run();const E=()=>{k.stop(),l&&l.scope&&Hs(l.scope.effects,k)};return $&&$.push(E),E}function Al(e,t,n){const s=this.proxy,o=xe(e)?e.includes(".")?Ri(s,e):()=>s[e]:e.bind(s,s);let i;Q(t)?i=t:(i=t.handler,n=t);const r=ke;qt(this);const l=Qn(o,i.bind(s),n);return r?qt(r):Tt(),l}function Ri(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{It(n,t)});else if(vi(e))for(const n in e)It(e[n],t);return e}function Il(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return De(()=>{e.isMounted=!0}),Ki(()=>{e.isUnmounting=!0}),e}const He=[Function,Array],Nl={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:He,onEnter:He,onAfterEnter:He,onEnterCancelled:He,onBeforeLeave:He,onLeave:He,onAfterLeave:He,onLeaveCancelled:He,onBeforeAppear:He,onAppear:He,onAfterAppear:He,onAppearCancelled:He},setup(e,{slots:t}){const n=ts(),s=Il();let o;return()=>{const i=t.default&&Ui(t.default(),!0);if(!i||!i.length)return;let r=i[0];if(i.length>1){for(const H of i)if(H.type!==Oe){r=H;break}}const l=ce(e),{mode:c}=l;if(s.isLeaving)return fs(r);const f=Vo(r);if(!f)return fs(r);const h=$s(f,l,s,n);Ps(f,h);const p=n.subTree,g=p&&Vo(p);let $=!1;const{getTransitionKey:j}=f.type;if(j){const H=j();o===void 0?o=H:H!==o&&(o=H,$=!0)}if(g&&g.type!==Oe&&(!$t(f,g)||$)){const H=$s(g,l,s,n);if(Ps(g,H),c==="out-in")return s.isLeaving=!0,H.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},fs(r);c==="in-out"&&f.type!==Oe&&(H.delayLeave=(se,k,E)=>{const I=zi(s,g);I[String(g.key)]=g,se._leaveCb=()=>{k(),se._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=E})}return r}}},Di=Nl;function zi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function $s(e,t,n,s){const{appear:o,mode:i,persisted:r=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:g,onAfterLeave:$,onLeaveCancelled:j,onBeforeAppear:H,onAppear:se,onAfterAppear:k,onAppearCancelled:E}=t,I=String(e.key),W=zi(n,e),Z=(M,X)=>{M&&Re(M,s,9,X)},he=(M,X)=>{const Y=X[1];Z(M,X),K(M)?M.every(re=>re.length<=1)&&Y():M.length<=1&&Y()},oe={mode:i,persisted:r,beforeEnter(M){let X=l;if(!n.isMounted)if(o)X=H||l;else return;M._leaveCb&&M._leaveCb(!0);const Y=W[I];Y&&$t(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),Z(X,[M])},enter(M){let X=c,Y=f,re=h;if(!n.isMounted)if(o)X=se||c,Y=k||f,re=E||h;else return;let O=!1;const ee=M._enterCb=R=>{O||(O=!0,R?Z(re,[M]):Z(Y,[M]),oe.delayedLeave&&oe.delayedLeave(),M._enterCb=void 0)};X?he(X,[M,ee]):ee()},leave(M,X){const Y=String(e.key);if(M._enterCb&&M._enterCb(!0),n.isUnmounting)return X();Z(p,[M]);let re=!1;const O=M._leaveCb=ee=>{re||(re=!0,X(),ee?Z(j,[M]):Z($,[M]),M._leaveCb=void 0,W[Y]===e&&delete W[Y])};W[Y]=e,g?he(g,[M,O]):O()},clone(M){return $s(M,t,n,s)}};return oe}function fs(e){if(Xn(e))return e=_t(e),e.children=null,e}function Vo(e){return Xn(e)?e.children?e.children[0]:void 0:e}function Ps(e,t){e.shapeFlag&6&&e.component?Ps(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ui(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,Xn=e=>e.type.__isKeepAlive;function Ol(e,t){ji(e,"a",t)}function Bl(e,t){ji(e,"da",t)}function ji(e,t,n=ke){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Zn(t,s,n),n){let o=n.parent;for(;o&&o.parent;)Xn(o.parent.vnode)&&Hl(s,t,n,o),o=o.parent}}function Hl(e,t,n,s){const o=Zn(t,e,s,!0);pt(()=>{Hs(s[t],o)},n)}function Zn(e,t,n=ke,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Gt(),qt(n);const l=Re(t,n,e,r);return Tt(),Yt(),l});return s?o.unshift(i):o.push(i),i}}const it=e=>(t,n=ke)=>(!hn||e==="sp")&&Zn(e,(...s)=>t(...s),n),Fl=it("bm"),De=it("m"),Rl=it("bu"),Zs=it("u"),Ki=it("bum"),pt=it("um"),Dl=it("sp"),zl=it("rtg"),Ul=it("rtc");function jl(e,t=ke){Zn("ec",e,t)}function Xe(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let r=0;rt(r,l,void 0,i&&i[l]));else{const r=Object.keys(e);o=new Array(r.length);for(let l=0,c=r.length;lOn(t)?!(t.type===Oe||t.type===G&&!Wi(t.children)):!0)?e:null}const Ss=e=>e?ir(e)?io(e)||e.proxy:Ss(e.parent):null,sn=we(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$emit:e=>e.emit,$options:e=>no(e),$forceUpdate:e=>e.f||(e.f=()=>Xs(e.update)),$nextTick:e=>e.n||(e.n=Qs.bind(e.proxy)),$watch:e=>Al.bind(e)}),ds=(e,t)=>e!==ge&&!e.__isScriptSetup&&ie(e,t),Kl={get({_:e},t){const{ctx:n,setupState:s,data:o,props:i,accessCache:r,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const $=r[t];if($!==void 0)switch($){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return r[t]=1,s[t];if(o!==ge&&ie(o,t))return r[t]=2,o[t];if((f=e.propsOptions[0])&&ie(f,t))return r[t]=3,i[t];if(n!==ge&&ie(n,t))return r[t]=4,n[t];Cs&&(r[t]=0)}}const h=sn[t];let p,g;if(h)return t==="$attrs"&&Be(e,"get",t),h(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==ge&&ie(n,t))return r[t]=4,n[t];if(g=c.config.globalProperties,ie(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return ds(o,t)?(o[t]=n,!0):s!==ge&&ie(s,t)?(s[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i}},r){let l;return!!n[r]||e!==ge&&ie(e,r)||ds(t,r)||(l=i[0])&&ie(l,r)||ie(s,r)||ie(sn,r)||ie(o.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Cs=!0;function ql(e){const t=no(e),n=e.proxy,s=e.ctx;Cs=!1,t.beforeCreate&&Lo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:l,provide:c,inject:f,created:h,beforeMount:p,mounted:g,beforeUpdate:$,updated:j,activated:H,deactivated:se,beforeDestroy:k,beforeUnmount:E,destroyed:I,unmounted:W,render:Z,renderTracked:he,renderTriggered:oe,errorCaptured:M,serverPrefetch:X,expose:Y,inheritAttrs:re,components:O,directives:ee,filters:R}=t;if(f&&Jl(f,s,null,e.appContext.config.unwrapInjectedRef),r)for(const be in r){const pe=r[be];Q(pe)&&(s[be]=pe.bind(n))}if(o){const be=o.call(n,n);ve(be)&&(e.data=Jn(be))}if(Cs=!0,i)for(const be in i){const pe=i[be],vt=Q(pe)?pe.bind(n,n):Q(pe.get)?pe.get.bind(n,n):qe,vn=!Q(pe)&&Q(pe.set)?pe.set.bind(n):qe,gt=ne({get:vt,set:vn});Object.defineProperty(s,be,{enumerable:!0,configurable:!0,get:()=>gt.value,set:Ye=>gt.value=Ye})}if(l)for(const be in l)Gi(l[be],s,n,be);if(c){const be=Q(c)?c.call(n):c;Reflect.ownKeys(be).forEach(pe=>{Ft(pe,be[pe])})}h&&Lo(h,e,"c");function ue(be,pe){K(pe)?pe.forEach(vt=>be(vt.bind(n))):pe&&be(pe.bind(n))}if(ue(Fl,p),ue(De,g),ue(Rl,$),ue(Zs,j),ue(Ol,H),ue(Bl,se),ue(jl,M),ue(Ul,he),ue(zl,oe),ue(Ki,E),ue(pt,W),ue(Dl,X),K(Y))if(Y.length){const be=e.exposed||(e.exposed={});Y.forEach(pe=>{Object.defineProperty(be,pe,{get:()=>n[pe],set:vt=>n[pe]=vt})})}else e.exposed||(e.exposed={});Z&&e.render===qe&&(e.render=Z),re!=null&&(e.inheritAttrs=re),O&&(e.components=O),ee&&(e.directives=ee)}function Jl(e,t,n=qe,s=!1){K(e)&&(e=Ts(e));for(const o in e){const i=e[o];let r;ve(i)?"default"in i?r=Ne(i.from||o,i.default,!0):r=Ne(i.from||o):r=Ne(i),Pe(r)&&s?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:l=>r.value=l}):t[o]=r}}function Lo(e,t,n){Re(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gi(e,t,n,s){const o=s.includes(".")?Ri(n,s):()=>n[s];if(xe(e)){const i=t[e];Q(i)&&et(o,i)}else if(Q(e))et(o,e.bind(n));else if(ve(e))if(K(e))e.forEach(i=>Gi(i,t,n,s));else{const i=Q(e.handler)?e.handler.bind(n):t[e.handler];Q(i)&&et(o,i,e)}}function no(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,l=i.get(t);let c;return l?c=l:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(f=>In(c,f,r,!0)),In(c,t,r)),ve(t)&&i.set(t,c),c}function In(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&In(e,i,n,!0),o&&o.forEach(r=>In(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const l=Wl[r]||n&&n[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const Wl={data:Mo,props:kt,emits:kt,methods:kt,computed:kt,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:kt,directives:kt,watch:Yl,provide:Mo,inject:Gl};function Mo(e,t){return t?e?function(){return we(Q(e)?e.call(this,this):e,Q(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return kt(Ts(e),Ts(t))}function Ts(e){if(K(e)){const t={};for(let n=0;n0)&&!(r&16)){if(r&8){const h=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[g,$]=Qi(p,t,!0);we(r,g),$&&l.push(...$)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!c)return ve(e)&&s.set(e,Nt),Nt;if(K(i))for(let h=0;h-1,$[1]=H<0||j-1||ie($,"default"))&&l.push(p)}}}const f=[r,l];return ve(e)&&s.set(e,f),f}function Ao(e){return e[0]!=="$"}function Io(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function No(e,t){return Io(e)===Io(t)}function Oo(e,t){return K(t)?t.findIndex(n=>No(n,e)):Q(t)&&No(t,e)?0:-1}const Xi=e=>e[0]==="_"||e==="$stable",so=e=>K(e)?e.map(Ue):[Ue(e)],Zl=(e,t,n)=>{if(t._n)return t;const s=A((...o)=>so(t(...o)),n);return s._c=!1,s},Zi=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Xi(o))continue;const i=e[o];if(Q(i))t[o]=Zl(o,i,s);else if(i!=null){const r=so(i);t[o]=()=>r}}},er=(e,t)=>{const n=so(t);e.slots.default=()=>n},ec=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ce(t),En(t,"_",n)):Zi(t,e.slots={})}else e.slots={},t&&er(e,t);En(e.slots,es,1)},tc=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,r=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(we(o,t),!n&&l===1&&delete o._):(i=!t.$stable,Zi(t,o)),r=t}else t&&(er(e,t),r={default:1});if(i)for(const l in o)!Xi(l)&&!(l in r)&&delete o[l]};function tr(){return{app:null,config:{isNativeTag:Ir,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let nc=0;function sc(e,t){return function(s,o=null){Q(s)||(s=Object.assign({},s)),o!=null&&!ve(o)&&(o=null);const i=tr(),r=new Set;let l=!1;const c=i.app={_uid:nc++,_component:s,_props:o,_container:null,_context:i,_instance:null,version:Pc,get config(){return i.config},set config(f){},use(f,...h){return r.has(f)||(f&&Q(f.install)?(r.add(f),f.install(c,...h)):Q(f)&&(r.add(f),f(c,...h))),c},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),c},component(f,h){return h?(i.components[f]=h,c):i.components[f]},directive(f,h){return h?(i.directives[f]=h,c):i.directives[f]},mount(f,h,p){if(!l){const g=V(s,o);return g.appContext=i,h&&t?t(g,f):e(g,f,p),l=!0,c._container=f,f.__vue_app__=c,io(g.component)||g.component.proxy}},unmount(){l&&(e(null,c._container),delete c._container.__vue_app__)},provide(f,h){return i.provides[f]=h,c}};return c}}function Nn(e,t,n,s,o=!1){if(K(e)){e.forEach((g,$)=>Nn(g,t&&(K(t)?t[$]:t),n,s,o));return}if(Rt(s)&&!o)return;const i=s.shapeFlag&4?io(s.component)||s.component.proxy:s.el,r=o?null:i,{i:l,r:c}=e,f=t&&t.r,h=l.refs===ge?l.refs={}:l.refs,p=l.setupState;if(f!=null&&f!==c&&(xe(f)?(h[f]=null,ie(p,f)&&(p[f]=null)):Pe(f)&&(f.value=null)),Q(c))dt(c,l,12,[r,h]);else{const g=xe(c),$=Pe(c);if(g||$){const j=()=>{if(e.f){const H=g?ie(p,c)?p[c]:h[c]:c.value;o?K(H)&&Hs(H,i):K(H)?H.includes(i)||H.push(i):g?(h[c]=[i],ie(p,c)&&(p[c]=h[c])):(c.value=[i],e.k&&(h[e.k]=c.value))}else g?(h[c]=r,ie(p,c)&&(p[c]=r)):$&&(c.value=r,e.k&&(h[e.k]=r))};r?(j.id=-1,Le(j,n)):j()}}}let lt=!1;const Pn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Sn=e=>e.nodeType===8;function oc(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:r,remove:l,insert:c,createComment:f}}=e,h=(k,E)=>{if(!E.hasChildNodes()){n(null,k,E),Mn(),E._vnode=k;return}lt=!1,p(E.firstChild,k,null,null,null),Mn(),E._vnode=k,lt&&console.error("Hydration completed but contains mismatches.")},p=(k,E,I,W,Z,he=!1)=>{const oe=Sn(k)&&k.data==="[",M=()=>H(k,E,I,W,Z,oe),{type:X,ref:Y,shapeFlag:re,patchFlag:O}=E;let ee=k.nodeType;E.el=k,O===-2&&(he=!1,E.dynamicChildren=null);let R=null;switch(X){case Kt:ee!==3?E.children===""?(c(E.el=o(""),r(k),k),R=k):R=M():(k.data!==E.children&&(lt=!0,k.data=E.children),R=i(k));break;case Oe:ee!==8||oe?R=M():R=i(k);break;case Dt:if(oe&&(k=i(k),ee=k.nodeType),ee===1||ee===3){R=k;const Me=!E.children.length;for(let ue=0;ue{he=he||!!E.dynamicChildren;const{type:oe,props:M,patchFlag:X,shapeFlag:Y,dirs:re}=E,O=oe==="input"&&re||oe==="option";if(O||X!==-1){if(re&&Xe(E,null,I,"created"),M)if(O||!he||X&48)for(const R in M)(O&&R.endsWith("value")||pn(R)&&!tn(R))&&s(k,R,null,M[R],!1,void 0,I);else M.onClick&&s(k,"onClick",null,M.onClick,!1,void 0,I);let ee;if((ee=M&&M.onVnodeBeforeMount)&&Fe(ee,I,E),re&&Xe(E,null,I,"beforeMount"),((ee=M&&M.onVnodeMounted)||re)&&Hi(()=>{ee&&Fe(ee,I,E),re&&Xe(E,null,I,"mounted")},W),Y&16&&!(M&&(M.innerHTML||M.textContent))){let R=$(k.firstChild,E,k,I,W,Z,he);for(;R;){lt=!0;const Me=R;R=R.nextSibling,l(Me)}}else Y&8&&k.textContent!==E.children&&(lt=!0,k.textContent=E.children)}return k.nextSibling},$=(k,E,I,W,Z,he,oe)=>{oe=oe||!!E.dynamicChildren;const M=E.children,X=M.length;for(let Y=0;Y{const{slotScopeIds:oe}=E;oe&&(Z=Z?Z.concat(oe):oe);const M=r(k),X=$(i(k),E,M,I,W,Z,he);return X&&Sn(X)&&X.data==="]"?i(E.anchor=X):(lt=!0,c(E.anchor=f("]"),M,X),X)},H=(k,E,I,W,Z,he)=>{if(lt=!0,E.el=null,he){const X=se(k);for(;;){const Y=i(k);if(Y&&Y!==X)l(Y);else break}}const oe=i(k),M=r(k);return l(k),n(null,E,M,oe,I,W,Pn(M),Z),oe},se=k=>{let E=0;for(;k;)if(k=i(k),k&&Sn(k)&&(k.data==="["&&E++,k.data==="]")){if(E===0)return i(k);E--}return k};return[h,p]}const Le=Hi;function ic(e){return rc(e,oc)}function rc(e,t){const n=Rr();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:r,createText:l,createComment:c,setText:f,setElementText:h,parentNode:p,nextSibling:g,setScopeId:$=qe,insertStaticContent:j}=e,H=(a,u,m,x=null,y=null,S=null,L=!1,P=null,T=!!u.dynamicChildren)=>{if(a===u)return;a&&!$t(a,u)&&(x=gn(a),Ye(a,y,S,!0),a=null),u.patchFlag===-2&&(T=!1,u.dynamicChildren=null);const{type:w,ref:D,shapeFlag:B}=u;switch(w){case Kt:se(a,u,m,x);break;case Oe:k(a,u,m,x);break;case Dt:a==null&&E(u,m,x,L);break;case G:O(a,u,m,x,y,S,L,P,T);break;default:B&1?Z(a,u,m,x,y,S,L,P,T):B&6?ee(a,u,m,x,y,S,L,P,T):(B&64||B&128)&&w.process(a,u,m,x,y,S,L,P,T,Mt)}D!=null&&y&&Nn(D,a&&a.ref,S,u||a,!u)},se=(a,u,m,x)=>{if(a==null)s(u.el=l(u.children),m,x);else{const y=u.el=a.el;u.children!==a.children&&f(y,u.children)}},k=(a,u,m,x)=>{a==null?s(u.el=c(u.children||""),m,x):u.el=a.el},E=(a,u,m,x)=>{[a.el,a.anchor]=j(a.children,u,m,x,a.el,a.anchor)},I=({el:a,anchor:u},m,x)=>{let y;for(;a&&a!==u;)y=g(a),s(a,m,x),a=y;s(u,m,x)},W=({el:a,anchor:u})=>{let m;for(;a&&a!==u;)m=g(a),o(a),a=m;o(u)},Z=(a,u,m,x,y,S,L,P,T)=>{L=L||u.type==="svg",a==null?he(u,m,x,y,S,L,P,T):X(a,u,y,S,L,P,T)},he=(a,u,m,x,y,S,L,P)=>{let T,w;const{type:D,props:B,shapeFlag:z,transition:q,dirs:te}=a;if(T=a.el=r(a.type,S,B&&B.is,B),z&8?h(T,a.children):z&16&&M(a.children,T,null,x,y,S&&D!=="foreignObject",L,P),te&&Xe(a,null,x,"created"),B){for(const fe in B)fe!=="value"&&!tn(fe)&&i(T,fe,null,B[fe],S,a.children,x,y,nt);"value"in B&&i(T,"value",null,B.value),(w=B.onVnodeBeforeMount)&&Fe(w,x,a)}oe(T,a,a.scopeId,L,x),te&&Xe(a,null,x,"beforeMount");const me=(!y||y&&!y.pendingBranch)&&q&&!q.persisted;me&&q.beforeEnter(T),s(T,u,m),((w=B&&B.onVnodeMounted)||me||te)&&Le(()=>{w&&Fe(w,x,a),me&&q.enter(T),te&&Xe(a,null,x,"mounted")},y)},oe=(a,u,m,x,y)=>{if(m&&$(a,m),x)for(let S=0;S{for(let w=T;w{const P=u.el=a.el;let{patchFlag:T,dynamicChildren:w,dirs:D}=u;T|=a.patchFlag&16;const B=a.props||ge,z=u.props||ge;let q;m&&bt(m,!1),(q=z.onVnodeBeforeUpdate)&&Fe(q,m,u,a),D&&Xe(u,a,m,"beforeUpdate"),m&&bt(m,!0);const te=y&&u.type!=="foreignObject";if(w?Y(a.dynamicChildren,w,P,m,x,te,S):L||pe(a,u,P,null,m,x,te,S,!1),T>0){if(T&16)re(P,u,B,z,m,x,y);else if(T&2&&B.class!==z.class&&i(P,"class",null,z.class,y),T&4&&i(P,"style",B.style,z.style,y),T&8){const me=u.dynamicProps;for(let fe=0;fe{q&&Fe(q,m,u,a),D&&Xe(u,a,m,"updated")},x)},Y=(a,u,m,x,y,S,L)=>{for(let P=0;P{if(m!==x){if(m!==ge)for(const P in m)!tn(P)&&!(P in x)&&i(a,P,m[P],null,L,u.children,y,S,nt);for(const P in x){if(tn(P))continue;const T=x[P],w=m[P];T!==w&&P!=="value"&&i(a,P,w,T,L,u.children,y,S,nt)}"value"in x&&i(a,"value",m.value,x.value)}},O=(a,u,m,x,y,S,L,P,T)=>{const w=u.el=a?a.el:l(""),D=u.anchor=a?a.anchor:l("");let{patchFlag:B,dynamicChildren:z,slotScopeIds:q}=u;q&&(P=P?P.concat(q):q),a==null?(s(w,m,x),s(D,m,x),M(u.children,m,D,y,S,L,P,T)):B>0&&B&64&&z&&a.dynamicChildren?(Y(a.dynamicChildren,z,m,y,S,L,P),(u.key!=null||y&&u===y.subTree)&&nr(a,u,!0)):pe(a,u,m,D,y,S,L,P,T)},ee=(a,u,m,x,y,S,L,P,T)=>{u.slotScopeIds=P,a==null?u.shapeFlag&512?y.ctx.activate(u,m,x,L,T):R(u,m,x,y,S,L,T):Me(a,u,T)},R=(a,u,m,x,y,S,L)=>{const P=a.component=pc(a,x,y);if(Xn(a)&&(P.ctx.renderer=Mt),mc(P),P.asyncDep){if(y&&y.registerDep(P,ue),!a.el){const T=P.subTree=V(Oe);k(null,T,u,m)}return}ue(P,a,u,m,y,S,L)},Me=(a,u,m)=>{const x=u.component=a.component;if(El(a,u,m))if(x.asyncDep&&!x.asyncResolved){be(x,u,m);return}else x.next=u,$l(x.update),x.update();else u.el=a.el,x.vnode=u},ue=(a,u,m,x,y,S,L)=>{const P=()=>{if(a.isMounted){let{next:D,bu:B,u:z,parent:q,vnode:te}=a,me=D,fe;bt(a,!1),D?(D.el=te.el,be(a,D,L)):D=te,B&&as(B),(fe=D.props&&D.props.onVnodeBeforeUpdate)&&Fe(fe,q,D,te),bt(a,!0);const ye=us(a),ze=a.subTree;a.subTree=ye,H(ze,ye,p(ze.el),gn(ze),a,y,S),D.el=ye.el,me===null&&Ll(a,ye.el),z&&Le(z,y),(fe=D.props&&D.props.onVnodeUpdated)&&Le(()=>Fe(fe,q,D,te),y)}else{let D;const{el:B,props:z}=u,{bm:q,m:te,parent:me}=a,fe=Rt(u);if(bt(a,!1),q&&as(q),!fe&&(D=z&&z.onVnodeBeforeMount)&&Fe(D,me,u),bt(a,!0),B&&ls){const ye=()=>{a.subTree=us(a),ls(B,a.subTree,a,y,null)};fe?u.type.__asyncLoader().then(()=>!a.isUnmounted&&ye()):ye()}else{const ye=a.subTree=us(a);H(null,ye,m,x,a,y,S),u.el=ye.el}if(te&&Le(te,y),!fe&&(D=z&&z.onVnodeMounted)){const ye=u;Le(()=>Fe(D,me,ye),y)}(u.shapeFlag&256||me&&Rt(me.vnode)&&me.vnode.shapeFlag&256)&&a.a&&Le(a.a,y),a.isMounted=!0,u=m=x=null}},T=a.effect=new Us(P,()=>Xs(w),a.scope),w=a.update=()=>T.run();w.id=a.uid,bt(a,!0),w()},be=(a,u,m)=>{u.component=a;const x=a.vnode.props;a.vnode=u,a.next=null,Xl(a,u.props,x,m),tc(a,u.children,m),Gt(),Co(),Yt()},pe=(a,u,m,x,y,S,L,P,T=!1)=>{const w=a&&a.children,D=a?a.shapeFlag:0,B=u.children,{patchFlag:z,shapeFlag:q}=u;if(z>0){if(z&128){vn(w,B,m,x,y,S,L,P,T);return}else if(z&256){vt(w,B,m,x,y,S,L,P,T);return}}q&8?(D&16&&nt(w,y,S),B!==w&&h(m,B)):D&16?q&16?vn(w,B,m,x,y,S,L,P,T):nt(w,y,S,!0):(D&8&&h(m,""),q&16&&M(B,m,x,y,S,L,P,T))},vt=(a,u,m,x,y,S,L,P,T)=>{a=a||Nt,u=u||Nt;const w=a.length,D=u.length,B=Math.min(w,D);let z;for(z=0;zD?nt(a,y,S,!0,!1,B):M(u,m,x,y,S,L,P,T,B)},vn=(a,u,m,x,y,S,L,P,T)=>{let w=0;const D=u.length;let B=a.length-1,z=D-1;for(;w<=B&&w<=z;){const q=a[w],te=u[w]=T?ut(u[w]):Ue(u[w]);if($t(q,te))H(q,te,m,null,y,S,L,P,T);else break;w++}for(;w<=B&&w<=z;){const q=a[B],te=u[z]=T?ut(u[z]):Ue(u[z]);if($t(q,te))H(q,te,m,null,y,S,L,P,T);else break;B--,z--}if(w>B){if(w<=z){const q=z+1,te=qz)for(;w<=B;)Ye(a[w],y,S,!0),w++;else{const q=w,te=w,me=new Map;for(w=te;w<=z;w++){const Ae=u[w]=T?ut(u[w]):Ue(u[w]);Ae.key!=null&&me.set(Ae.key,w)}let fe,ye=0;const ze=z-te+1;let At=!1,mo=0;const Xt=new Array(ze);for(w=0;w=ze){Ye(Ae,y,S,!0);continue}let Qe;if(Ae.key!=null)Qe=me.get(Ae.key);else for(fe=te;fe<=z;fe++)if(Xt[fe-te]===0&&$t(Ae,u[fe])){Qe=fe;break}Qe===void 0?Ye(Ae,y,S,!0):(Xt[Qe-te]=w+1,Qe>=mo?mo=Qe:At=!0,H(Ae,u[Qe],m,null,y,S,L,P,T),ye++)}const vo=At?lc(Xt):Nt;for(fe=vo.length-1,w=ze-1;w>=0;w--){const Ae=te+w,Qe=u[Ae],go=Ae+1{const{el:S,type:L,transition:P,children:T,shapeFlag:w}=a;if(w&6){gt(a.component.subTree,u,m,x);return}if(w&128){a.suspense.move(u,m,x);return}if(w&64){L.move(a,u,m,Mt);return}if(L===G){s(S,u,m);for(let B=0;BP.enter(S),y);else{const{leave:B,delayLeave:z,afterLeave:q}=P,te=()=>s(S,u,m),me=()=>{B(S,()=>{te(),q&&q()})};z?z(S,te,me):me()}else s(S,u,m)},Ye=(a,u,m,x=!1,y=!1)=>{const{type:S,props:L,ref:P,children:T,dynamicChildren:w,shapeFlag:D,patchFlag:B,dirs:z}=a;if(P!=null&&Nn(P,null,m,a,!0),D&256){u.ctx.deactivate(a);return}const q=D&1&&z,te=!Rt(a);let me;if(te&&(me=L&&L.onVnodeBeforeUnmount)&&Fe(me,u,a),D&6)Cr(a.component,m,x);else{if(D&128){a.suspense.unmount(m,x);return}q&&Xe(a,null,u,"beforeUnmount"),D&64?a.type.remove(a,u,m,y,Mt,x):w&&(S!==G||B>0&&B&64)?nt(w,u,m,!1,!0):(S===G&&B&384||!y&&D&16)&&nt(T,u,m),x&&_o(a)}(te&&(me=L&&L.onVnodeUnmounted)||q)&&Le(()=>{me&&Fe(me,u,a),q&&Xe(a,null,u,"unmounted")},m)},_o=a=>{const{type:u,el:m,anchor:x,transition:y}=a;if(u===G){Sr(m,x);return}if(u===Dt){W(a);return}const S=()=>{o(m),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(a.shapeFlag&1&&y&&!y.persisted){const{leave:L,delayLeave:P}=y,T=()=>L(m,S);P?P(a.el,S,T):T()}else S()},Sr=(a,u)=>{let m;for(;a!==u;)m=g(a),o(a),a=m;o(u)},Cr=(a,u,m)=>{const{bum:x,scope:y,update:S,subTree:L,um:P}=a;x&&as(x),y.stop(),S&&(S.active=!1,Ye(L,a,u,m)),P&&Le(P,u),Le(()=>{a.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},nt=(a,u,m,x=!1,y=!1,S=0)=>{for(let L=S;La.shapeFlag&6?gn(a.component.subTree):a.shapeFlag&128?a.suspense.next():g(a.anchor||a.el),po=(a,u,m)=>{a==null?u._vnode&&Ye(u._vnode,null,null,!0):H(u._vnode||null,a,u,null,null,null,m),Co(),Mn(),u._vnode=a},Mt={p:H,um:Ye,m:gt,r:_o,mt:R,mc:M,pc:pe,pbc:Y,n:gn,o:e};let rs,ls;return t&&([rs,ls]=t(Mt)),{render:po,hydrate:rs,createApp:sc(po,rs)}}function bt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function nr(e,t,n=!1){const s=e.children,o=t.children;if(K(s)&&K(o))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}const cc=e=>e.__isTeleport,G=Symbol(void 0),Kt=Symbol(void 0),Oe=Symbol(void 0),Dt=Symbol(void 0),on=[];let Ke=null;function d(e=!1){on.push(Ke=e?null:[])}function ac(){on.pop(),Ke=on[on.length-1]||null}let dn=1;function Bo(e){dn+=e}function sr(e){return e.dynamicChildren=dn>0?Ke||Nt:null,ac(),dn>0&&Ke&&Ke.push(e),e}function v(e,t,n,s,o,i){return sr(b(e,t,n,s,o,i,!0))}function J(e,t,n,s,o){return sr(V(e,t,n,s,o,!0))}function On(e){return e?e.__v_isVNode===!0:!1}function $t(e,t){return e.type===t.type&&e.key===t.key}const es="__vInternal",or=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>e!=null?xe(e)||Pe(e)||Q(e)?{i:Se,r:e,k:t,f:!!n}:e:null;function b(e,t=null,n=null,s=0,o=null,i=e===G?0:1,r=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&or(t),ref:t&&Tn(t),scopeId:Yn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Se};return l?(oo(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=xe(n)?8:16),dn>0&&!r&&Ke&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ke.push(c),c}const V=uc;function uc(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===qi)&&(e=Oe),On(e)){const l=_t(e,t,!0);return n&&oo(l,n),dn>0&&!i&&Ke&&(l.shapeFlag&6?Ke[Ke.indexOf(e)]=l:Ke.push(l)),l.patchFlag|=-2,l}if(yc(e)&&(e=e.__vccOpts),t){t=fc(t);let{class:l,style:c}=t;l&&!xe(l)&&(t.class=de(l)),ve(c)&&(Ti(c)&&!K(c)&&(c=we({},c)),t.style=zn(c))}const r=xe(e)?1:Ml(e)?128:cc(e)?64:ve(e)?4:Q(e)?2:0;return b(e,t,n,s,o,r,i,!0)}function fc(e){return e?Ti(e)||es in e?we({},e):e:null}function _t(e,t,n=!1){const{props:s,ref:o,patchFlag:i,children:r}=e,l=t?Vn(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&or(l),ref:t&&t.ref?n&&o?K(o)?o.concat(Tn(t)):[o,Tn(t)]:Tn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==G?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_t(e.ssContent),ssFallback:e.ssFallback&&_t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function Ee(e=" ",t=0){return V(Kt,null,e,t)}function dc(e,t){const n=V(Dt,null,e);return n.staticCount=t,n}function U(e="",t=!1){return t?(d(),J(Oe,null,e)):V(Oe,null,e)}function Ue(e){return e==null||typeof e=="boolean"?V(Oe):K(e)?V(G,null,e.slice()):typeof e=="object"?ut(e):V(Kt,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_t(e)}function oo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(es in t)?t._ctx=Se:o===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Q(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),s&64?(n=16,t=[Ee(t)]):n=8);e.children=t,e.shapeFlag|=n}function Vn(...e){const t={};for(let n=0;nke||Se,qt=e=>{ke=e,e.scope.on()},Tt=()=>{ke&&ke.scope.off(),ke=null};function ir(e){return e.vnode.shapeFlag&4}let hn=!1;function mc(e,t=!1){hn=t;const{props:n,children:s}=e.vnode,o=ir(e);Ql(e,n,o,t),ec(e,s);const i=o?vc(e,t):void 0;return hn=!1,i}function vc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=nn(new Proxy(e.ctx,Kl));const{setup:s}=n;if(s){const o=e.setupContext=s.length>1?lr(e):null;qt(e),Gt();const i=dt(s,e,0,[e.props,o]);if(Yt(),Tt(),pi(i)){if(i.then(Tt,Tt),t)return i.then(r=>{Ho(e,r,t)}).catch(r=>{Wn(r,e,0)});e.asyncDep=i}else Ho(e,i,t)}else rr(e,t)}function Ho(e,t,n){Q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ve(t)&&(e.setupState=Mi(t)),rr(e,n)}let Fo;function rr(e,t,n){const s=e.type;if(!e.render){if(!t&&Fo&&!s.render){const o=s.template||no(e).template;if(o){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=we(we({isCustomElement:i,delimiters:l},r),c);s.render=Fo(o,f)}}e.render=s.render||qe}qt(e),Gt(),ql(e),Yt(),Tt()}function gc(e){return new Proxy(e.attrs,{get(t,n){return Be(e,"get","$attrs"),t[n]}})}function lr(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=gc(e))},slots:e.slots,emit:e.emit,expose:t}}function io(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Mi(nn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sn)return sn[n](e)},has(t,n){return n in t||n in sn}}))}function bc(e,t=!0){return Q(e)?e.displayName||e.name:e.name||t&&e.__name}function yc(e){return Q(e)&&"__vccOpts"in e}const ne=(e,t)=>xl(e,t,hn);function xc(){return kc().slots}function kc(){const e=ts();return e.setupContext||(e.setupContext=lr(e))}function Bn(e,t,n){const s=arguments.length;return s===2?ve(t)&&!K(t)?On(t)?V(e,null,[t]):V(e,t):V(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&On(n)&&(n=[n]),V(e,t,n))}const wc=Symbol(""),$c=()=>Ne(wc),Pc="3.2.45",Sc="http://www.w3.org/2000/svg",Pt=typeof document<"u"?document:null,Ro=Pt&&Pt.createElement("template"),Cc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t?Pt.createElementNS(Sc,e):Pt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Pt.createTextNode(e),createComment:e=>Pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const r=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{Ro.innerHTML=s?`${e}`:e;const l=Ro.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Tc(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Vc(e,t,n){const s=e.style,o=xe(n);if(n&&!o){for(const i in n)Es(s,i,n[i]);if(t&&!xe(t))for(const i in t)n[i]==null&&Es(s,i,"")}else{const i=s.display;o?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const Do=/\s*!important$/;function Es(e,t,n){if(K(n))n.forEach(s=>Es(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ec(e,t);Do.test(n)?e.setProperty(Wt(s),n.replace(Do,""),"important"):e[s]=n}}const zo=["Webkit","Moz","ms"],hs={};function Ec(e,t){const n=hs[t];if(n)return n;let s=tt(t);if(s!=="filter"&&s in e)return hs[t]=s;s=Kn(s);for(let o=0;o_s||(Bc.then(()=>_s=0),_s=Date.now());function Fc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Rc(s,n.value),t,5,[s])};return n.value=e,n.attached=Hc(),n}function Rc(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const Ko=/^on[a-z]/,Dc=(e,t,n,s,o=!1,i,r,l,c)=>{t==="class"?Tc(e,s,o):t==="style"?Vc(e,n,s):pn(t)?Bs(t)||Nc(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):zc(e,t,s,o))?Mc(e,t,s,i,r,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Lc(e,t,s,o))};function zc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Ko.test(t)&&Q(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ko.test(t)&&xe(n)?!1:t in e}function Uc(e){const t=ts();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Ms(i,o))},s=()=>{const o=e(t.proxy);Ls(t.subTree,o),n(o)};Fi(s),De(()=>{const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),pt(()=>o.disconnect())})}function Ls(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Ls(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Ms(e.el,t);else if(e.type===G)e.children.forEach(n=>Ls(n,t));else if(e.type===Dt){let{el:n,anchor:s}=e;for(;n&&(Ms(n,t),n!==s);)n=n.nextSibling}}function Ms(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const ct="transition",Zt="animation",ns=(e,{slots:t})=>Bn(Di,jc(e),t);ns.displayName="Transition";const cr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ns.props=we({},Di.props,cr);const yt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},qo=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function jc(e){const t={};for(const O in e)O in cr||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=r,appearToClass:h=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:$=`${n}-leave-to`}=e,j=Kc(o),H=j&&j[0],se=j&&j[1],{onBeforeEnter:k,onEnter:E,onEnterCancelled:I,onLeave:W,onLeaveCancelled:Z,onBeforeAppear:he=k,onAppear:oe=E,onAppearCancelled:M=I}=t,X=(O,ee,R)=>{xt(O,ee?h:l),xt(O,ee?f:r),R&&R()},Y=(O,ee)=>{O._isLeaving=!1,xt(O,p),xt(O,$),xt(O,g),ee&&ee()},re=O=>(ee,R)=>{const Me=O?oe:E,ue=()=>X(ee,O,R);yt(Me,[ee,ue]),Jo(()=>{xt(ee,O?c:i),at(ee,O?h:l),qo(Me)||Wo(ee,s,H,ue)})};return we(t,{onBeforeEnter(O){yt(k,[O]),at(O,i),at(O,r)},onBeforeAppear(O){yt(he,[O]),at(O,c),at(O,f)},onEnter:re(!1),onAppear:re(!0),onLeave(O,ee){O._isLeaving=!0;const R=()=>Y(O,ee);at(O,p),Wc(),at(O,g),Jo(()=>{O._isLeaving&&(xt(O,p),at(O,$),qo(W)||Wo(O,s,se,R))}),yt(W,[O,R])},onEnterCancelled(O){X(O,!1),yt(I,[O])},onAppearCancelled(O){X(O,!0),yt(M,[O])},onLeaveCancelled(O){Y(O),yt(Z,[O])}})}function Kc(e){if(e==null)return null;if(ve(e))return[ps(e.enter),ps(e.leave)];{const t=ps(e);return[t,t]}}function ps(e){return Ds(e)}function at(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function xt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Jo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let qc=0;function Wo(e,t,n,s){const o=e._endId=++qc,i=()=>{o===e._endId&&s()};if(n)return setTimeout(i,n);const{type:r,timeout:l,propCount:c}=Jc(e,t);if(!r)return s();const f=r+"end";let h=0;const p=()=>{e.removeEventListener(f,g),i()},g=$=>{$.target===e&&++h>=c&&p()};setTimeout(()=>{h(n[j]||"").split(", "),o=s(`${ct}Delay`),i=s(`${ct}Duration`),r=Go(o,i),l=s(`${Zt}Delay`),c=s(`${Zt}Duration`),f=Go(l,c);let h=null,p=0,g=0;t===ct?r>0&&(h=ct,p=r,g=i.length):t===Zt?f>0&&(h=Zt,p=f,g=c.length):(p=Math.max(r,f),h=p>0?r>f?ct:Zt:null,g=h?h===ct?i.length:c.length:0);const $=h===ct&&/\b(transform|all)(,|$)/.test(s(`${ct}Property`).toString());return{type:h,timeout:p,propCount:g,hasTransform:$}}function Go(e,t){for(;e.lengthYo(n)+Yo(e[s])))}function Yo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Wc(){return document.body.offsetHeight}const Gc=["ctrl","shift","alt","meta"],Yc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Gc.some(n=>e[`${n}Key`]&&!t.includes(n))},Qc=(e,t)=>(n,...s)=>{for(let o=0;o{const t=Zc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=ta(s);if(o)return n(o,!0,o instanceof SVGElement)},t};function ta(e){return xe(e)?document.querySelector(e):e}const N=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},na="modulepreload",sa=function(e){return"/HuaiGu/"+e},Xo={},oa=function(t,n,s){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=sa(i),i in Xo)return;Xo[i]=!0;const r=i.endsWith(".css"),l=r?'[rel="stylesheet"]':"";if(!!s)for(let h=o.length-1;h>=0;h--){const p=o[h];if(p.href===i&&(!r||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const f=document.createElement("link");if(f.rel=r?"stylesheet":na,r||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),r)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};const ia=F({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(d(),v("span",{class:de(["VPBadge",e.type??"tip"])},[C(t.$slots,"default",{},()=>[Ee(ae(e.text),1)],!0)],2))}});const ra=N(ia,[["__scopeId","data-v-350d3852"]]),la=JSON.parse('{"lang":"en-US","title":"怀谷","description":"vue react leetcode angular","base":"/HuaiGu/","head":[],"appearance":true,"themeConfig":{"siteTitle":"怀谷","nav":[{"text":"Vue","link":"/Vue/组件通信/Api-attrs"},{"text":"开发总结","link":"/开发总结/Adobe-pr插件"},{"text":"计算机基础","link":"/计算机基础/"},{"text":"算法","link":"/算法/二叉树/层序遍历"}],"lastUpdated":"最近更新时间","socialLinks":[{"icon":"github","link":"https://github.com/Huai-Gu/HuaiGu"}],"sidebar":[{"collapsible":true,"text":"JS.TS","items":[{"collapsible":true,"text":"ES6","items":[{"text":"Iterator","link":"/JS.TS/ES6/Iterator.md"},{"text":"Symbol","link":"/JS.TS/ES6/Symbol.md"},{"text":"index","link":"/JS.TS/ES6/index.md"},{"text":"promise","link":"/JS.TS/ES6/promise.md"},{"text":"解构赋值","link":"/JS.TS/ES6/解构赋值.md"},{"text":"运算符","link":"/JS.TS/ES6/运算符.md"}]},{"text":"JS上下文和执行栈","link":"/JS.TS/JS上下文和执行栈.md"},{"collapsible":true,"text":"TS","items":[{"text":"is","link":"/JS.TS/TS/is.md"},{"text":"索引","link":"/JS.TS/TS/索引.md"}]},{"collapsible":true,"text":"基础","items":[{"text":"Eventloop","link":"/JS.TS/基础/Eventloop.md"},{"text":"Js中的map和weakMap","link":"/JS.TS/基础/Js中的map和weakMap.md"},{"text":"new操作符","link":"/JS.TS/基础/new操作符.md"},{"text":"一文搞懂map函数","link":"/JS.TS/基础/一文搞懂map函数.md"},{"text":"垃圾回收","link":"/JS.TS/基础/垃圾回收.md"}]},{"collapsible":true,"text":"设计模式","items":[{"text":"发布订阅模式","link":"/JS.TS/设计模式/发布订阅模式.md"}]}]},{"collapsible":true,"text":"React","items":[{"collapsible":true,"text":"ReactHooks","items":[{"text":"useCallback","link":"/React/ReactHooks/useCallback.md"},{"text":"useContext","link":"/React/ReactHooks/useContext.md"},{"text":"useEffect","link":"/React/ReactHooks/useEffect.md"},{"text":"useRef","link":"/React/ReactHooks/useRef.md"},{"text":"useState","link":"/React/ReactHooks/useState.md"}]},{"text":"index","link":"/React/index.md"},{"text":"redux","link":"/React/redux.md"}]},{"collapsible":true,"text":"Vue","items":[{"collapsible":true,"text":"CSS","items":[{"text":"scroll","link":"/Vue/CSS/scroll.md"}]},{"collapsible":true,"text":"源码分析","items":[{"text":"VNode与diff算法","link":"/Vue/源码分析/VNode与diff算法.md"}]},{"collapsible":true,"text":"组件通信","items":[{"text":"Api-attrs","link":"/Vue/组件通信/Api-attrs.md"},{"text":"Api-parent","link":"/Vue/组件通信/Api-parent.md"},{"text":"Api-props","link":"/Vue/组件通信/Api-props.md"},{"text":"Api-provide","link":"/Vue/组件通信/Api-provide.md"}]}]},{"collapsible":true,"text":"tips","items":[{"text":"2023.3.5","link":"/tips/2023.3.5.md"}]},{"collapsible":true,"text":"开发总结","items":[{"text":"Adobe-pr插件","link":"/开发总结/Adobe-pr插件.md"},{"collapsible":true,"text":"canvas","items":[{"text":"canvas","link":"/开发总结/canvas/canvas.md"}]},{"text":"github-deploy","link":"/开发总结/github-deploy.md"},{"text":"v-for和v-if","link":"/开发总结/v-for和v-if.md"},{"collapsible":true,"text":"常用的库","items":[{"text":"css","link":"/开发总结/常用的库/css.md"}]}]},{"collapsible":true,"text":"算法","items":[{"collapsible":true,"text":"二叉树","items":[{"text":"层序遍历","link":"/算法/二叉树/层序遍历.md"}]},{"collapsible":true,"text":"面试算法题","items":[{"text":"1.15七牛云春招笔试题","link":"/算法/面试算法题/1.15七牛云春招笔试题.md"},{"text":"1.7字节","link":"/算法/面试算法题/1.7字节.md"}]}]},{"collapsible":true,"text":"计算机基础","items":[{"text":"HTTP","link":"/计算机基础/HTTP.md"},{"collapsible":true,"text":"git","items":[{"text":"git规范","link":"/计算机基础/git/git规范.md"},{"text":"git设置两个ssh密钥","link":"/计算机基础/git/git设置两个ssh密钥.md"},{"text":"index","link":"/计算机基础/git/index.md"},{"text":"tips","link":"/计算机基础/git/tips.md"},{"collapsible":true,"text":"命令","items":[{"text":"init","link":"/计算机基础/git/命令/init.md"},{"text":"merge","link":"/计算机基础/git/命令/merge.md"},{"text":"常用","link":"/计算机基础/git/命令/常用.md"}]},{"collapsible":true,"text":"场景及解决方案","items":[{"text":"发版","link":"/计算机基础/git/场景及解决方案/发版.md"},{"text":"开发新功能","link":"/计算机基础/git/场景及解决方案/开发新功能.md"},{"text":"紧急bug","link":"/计算机基础/git/场景及解决方案/紧急bug.md"}]}]},{"text":"index","link":"/计算机基础/index.md"}]},{"collapsible":true,"text":"面试","items":[{"collapsible":true,"text":"CZ前端","items":[{"text":"HTML+CSS","link":"/面试/CZ前端/HTML+CSS.md"},{"collapsible":true,"text":"JS基础","items":[{"text":"作用域和闭包","link":"/面试/CZ前端/JS基础/作用域和闭包.md"},{"text":"原型和原型链","link":"/面试/CZ前端/JS基础/原型和原型链.md"},{"text":"变量类型和计算","link":"/面试/CZ前端/JS基础/变量类型和计算.md"},{"text":"异步","link":"/面试/CZ前端/JS基础/异步.md"}]}]},{"collapsible":true,"text":"NONI","items":[{"collapsible":true,"text":"JS","items":[{"collapsible":true,"text":"JS基础","items":[{"text":"DOM和BOM","link":"/面试/NONI/JS/JS基础/DOM和BOM.md"},{"text":"new操作符实现原理","link":"/面试/NONI/JS/JS基础/new操作符实现原理.md"},{"text":"数组原生方法","link":"/面试/NONI/JS/JS基础/数组原生方法.md"}]}]},{"collapsible":true,"text":"Vue","items":[{"text":"v-if和v-for同时使用问题","link":"/面试/NONI/Vue/v-if和v-for同时使用问题.md"}]}]},{"collapsible":true,"text":"前端","items":[{"collapsible":true,"text":"HTTP","items":[{"text":"HTTP的优先级","link":"/面试/前端/HTTP/HTTP的优先级.md"}]},{"text":"flexandgrid","link":"/面试/前端/flexandgrid.md"},{"collapsible":true,"text":"url到页面","items":[{"text":"总章","link":"/面试/前端/url到页面/总章.md"}]},{"collapsible":true,"text":"事件","items":[{"text":"事件循环","link":"/面试/前端/事件/事件循环.md"},{"text":"事件机制","link":"/面试/前端/事件/事件机制.md"}]},{"text":"客户端存储","link":"/面试/前端/客户端存储.md"},{"text":"跨域","link":"/面试/前端/跨域.md"}]}]}],"base":"/fantastic-admin/"},"locales":{},"langs":{},"scrollOffset":90,"cleanUrls":"disabled"}'),ss=/^[a-z]+:/i,ca=/^pathname:\/\//,Zo="vitepress-theme-appearance",Ve=typeof window<"u",ar={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function aa(e,t){t.sort((n,s)=>{const o=s.split("/").length-n.split("/").length;return o!==0?o:s.length-n.length});for(const n of t)if(e.startsWith(n))return n}function ei(e,t){const n=aa(t,Object.keys(e));return n?e[n]:void 0}function ua(e){const{locales:t}=e.themeConfig||{},n=e.locales;return t&&n?Object.keys(t).reduce((s,o)=>(s[o]={label:t[o].label,lang:n[o].lang},s),{}):{}}function fa(e,t){t=ha(e,t);const n=ei(e.locales||{},t),s=ei(e.themeConfig.locales||{},t);return Object.assign({},e,n,{themeConfig:Object.assign({},e.themeConfig,s,{locales:{}}),lang:(n||e).lang,locales:{},langs:ua(e)})}function ur(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=da(e.title,s);return`${n}${o}`}function da(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ha(e,t){if(!Ve)return t;const n=e.base,s=n.endsWith("/")?n.slice(0,-1):n;return t.slice(s.length)}function _a(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([i,r])=>i===n&&r[o[0]]===o[1])}function pa(e,t){return[...e.filter(n=>!_a(t,n)),...t]}const ma=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,va=/^[a-z]:/i;function ti(e){const t=va.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ma,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}function ga(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _n(e){return ss.test(e)?e:ga(Jt.value.base,e)}function fr(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ve){const n="/HuaiGu/";t=ti(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];!s&&t.endsWith("_index.md")&&(t=t.slice(0,-9)+".md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${ti(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}const dr=Symbol(),Jt=vl(la);function ba(e){const t=ne(()=>fa(Jt.value,e.path));return{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),lang:ne(()=>t.value.lang),localePath:ne(()=>{const{langs:n,lang:s}=t.value,o=Object.keys(n).find(i=>n[i].lang===s);return _n(o||"/")}),title:ne(()=>ur(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:_e(!1)}}function le(){const e=Ne(dr);if(!e)throw new Error("vitepress data not properly injected in app");return e}const hr=Symbol(),ni="http://a.com",ya=()=>({path:"/",component:null,data:ar});function xa(e,t){const n=Jn(ya()),s={route:n,go:o};async function o(l=Ve?location.href:"/"){var f,h;await((f=s.onBeforeRouteChange)==null?void 0:f.call(s,l));const c=new URL(l,ni);Jt.value.cleanUrls==="disabled"&&!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",l=c.pathname+c.search+c.hash),Ve&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await r(l),await((h=s.onAfterRouteChanged)==null?void 0:h.call(s,l))}let i=null;async function r(l,c=0,f=!1){const h=new URL(l,ni),p=i=h.pathname;try{let g=await e(p);if(i===p){i=null;const{default:$,__pageData:j}=g;if(!$)throw new Error(`Invalid route component: ${$}`);n.path=Ve?p:_n(p),n.component=nn($),n.data=nn(j),Ve&&Qs(()=>{if(h.hash&&!c){let H=null;try{H=document.querySelector(decodeURIComponent(h.hash))}catch(se){console.warn(se)}if(H){si(H,h.hash);return}}window.scrollTo(0,c)})}}catch(g){if(!/fetch/.test(g.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(g),!f)try{const $=await fetch(Jt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await $.json(),await r(l,c,!0);return}catch{}i===p&&(i=null,n.path=Ve?p:_n(p),n.component=t?nn(t):null,n.data=ar)}}return Ve&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const f=l.target.closest("a");if(f&&!f.closest(".vp-raw")&&!f.download){const{href:h,origin:p,pathname:g,hash:$,search:j,target:H}=f,se=window.location,k=g.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&H!=="_blank"&&p===se.origin&&!(k&&k[0]!==".html")&&(l.preventDefault(),g===se.pathname&&j===se.search?$&&$!==se.hash&&(history.pushState(null,"",$),window.dispatchEvent(new Event("hashchange")),si(f,$,f.classList.contains("header-anchor"))):o(h))}},{capture:!0}),window.addEventListener("popstate",l=>{r(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function ka(){const e=Ne(hr);if(!e)throw new Error("useRouter() is called without provider.");return e}function mt(){return ka().route}function si(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=Jt.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const i=parseInt(window.getComputedStyle(s).paddingTop,10),r=window.scrollY+s.getBoundingClientRect().top-o+i;!n||Math.abs(r-window.scrollY)>window.innerHeight?window.scrollTo(0,r):window.scrollTo({left:0,top:r,behavior:"smooth"})}}const wa=F({name:"VitePressContent",props:{onContentUpdated:Function},setup(e){const t=mt();return Zs(()=>{var n;(n=e.onContentUpdated)==null||n.call(e)}),()=>Bn("div",{style:{position:"relative"}},[t.component?Bn(t.component):null])}});var oi;const mn=typeof window<"u";mn&&((oi=window==null?void 0:window.navigator)!=null&&oi.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function $a(e){return e}function Pa(e){return Ur()?(jr(e),!0):!1}function Sa(e){return typeof e=="function"?ne(e):_e(e)}function Ca(e,t=!0){ts()?De(e):t?e():Qs(e)}const Ta=mn?window:void 0;mn&&window.document;mn&&window.navigator;mn&&window.location;function Va(e,t=!1){const n=_e(),s=()=>n.value=Boolean(e());return s(),Ca(s,t),n}function As(e,t={}){const{window:n=Ta}=t,s=Va(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=_e(!1),r=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},l=()=>{s.value&&(r(),o=n.matchMedia(Sa(e).value),i.value=o.matches,"addEventListener"in o?o.addEventListener("change",l):o.addListener(l))};return Vt(l),Pa(()=>r()),i}const Is=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Ns="__vueuse_ssr_handlers__";Is[Ns]=Is[Ns]||{};Is[Ns];var ii;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ii||(ii={}));var Ea=Object.defineProperty,ri=Object.getOwnPropertySymbols,La=Object.prototype.hasOwnProperty,Ma=Object.prototype.propertyIsEnumerable,li=(e,t,n)=>t in e?Ea(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Aa=(e,t)=>{for(var n in t||(t={}))La.call(t,n)&&li(e,n,t[n]);if(ri)for(var n of ri(t))Ma.call(t,n)&&li(e,n,t[n]);return e};const Ia={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};Aa({linear:$a},Ia);const _r=/#.*$/,Na=/(index)?\.(md|html)$/,Oa=typeof window<"u",Ba=_e(Oa?location.hash:"");function Ha(e){return ss.test(e)}function Fa(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function Qt(e,t,n=!1){if(t===void 0)return!1;if(e=ai(`/${e}`),n)return new RegExp(t).test(e);if(ai(t)!==e)return!1;const s=t.match(_r);return s?Ba.value===s[0]:!0}function ci(e){return/^\//.test(e)?e:`/${e}`}function ai(e){return decodeURI(e).replace(_r,"").replace(Na,"")}function Hn(e){if(Ha(e))return e.replace(ca,"");const{site:t}=le(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),i=n.endsWith("/")||n.endsWith(".html")?e:`${n.replace(/(\.md)?$/,t.value.cleanUrls==="disabled"?".html":"")}${s}${o}`;return _n(i)}function pr(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=ci(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(ci(s)));return n?e[n]:[]}function Ra(e){const t=[];function n(s){for(const o of s)o.link&&t.push({...o,link:o.link}),"items"in o&&n(o.items)}for(const s of e)n(s.items);return t}function Ge(){const e=mt(),{theme:t,frontmatter:n}=le(),s=As("(min-width: 960px)"),o=_e(!1),i=ne(()=>{const g=t.value.sidebar,$=e.data.relativePath;return g?pr(g,$):[]}),r=ne(()=>n.value.sidebar!==!1&&i.value.length>0&&n.value.layout!=="home"),l=ne(()=>n.value.layout!=="home"&&n.value.aside!==!1),c=ne(()=>r.value&&s.value);function f(){o.value=!0}function h(){o.value=!1}function p(){o.value?h():f()}return{isOpen:o,sidebar:i,hasSidebar:r,hasAside:l,isSidebarEnabled:c,open:f,close:h,toggle:p}}function Da(e,t){let n;Vt(()=>{n=e.value?document.activeElement:void 0}),De(()=>{window.addEventListener("keyup",s)}),pt(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}const za=F({__name:"VPSkipLink",setup(e){const t=mt(),n=_e();et(()=>t.path,()=>n.value.focus());function s({target:o}){const i=document.querySelector(o.hash);if(i){const r=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",r)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",r),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(d(),v(G,null,[b("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),b("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Ua=N(za,[["__scopeId","data-v-151f2593"]]),ja={key:0,class:"VPBackdrop"},Ka=F({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(d(),J(ns,{name:"fade"},{default:A(()=>[e.show?(d(),v("div",ja)):U("",!0)]),_:1}))}});const qa=N(Ka,[["__scopeId","data-v-c7c65b34"]]);function Ja(){const e=_e(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=mt();return et(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const Wa=["src","alt"],Ga={inheritAttrs:!1},Ya=F({...Ga,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=Et("VPImage",!0);return e.image?(d(),v(G,{key:0},[typeof e.image=="string"||"src"in e.image?(d(),v("img",Vn({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:_(_n)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Wa)):(d(),v(G,{key:1},[V(s,Vn({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),V(s,Vn({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):U("",!0)}}});const ro=N(Ya,[["__scopeId","data-v-6db2186b"]]),Qa=["href"],Xa=F({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=le(),{hasSidebar:s}=Ge();return(o,i)=>(d(),v("div",{class:de(["VPNavBarTitle",{"has-sidebar":_(s)}])},[b("a",{class:"title",href:_(t).base},[C(o.$slots,"nav-bar-title-before",{},void 0,!0),V(ro,{class:"logo",image:_(n).logo},null,8,["image"]),_(n).siteTitle?(d(),v(G,{key:0},[Ee(ae(_(n).siteTitle),1)],64)):_(n).siteTitle===void 0?(d(),v(G,{key:1},[Ee(ae(_(t).title),1)],64)):U("",!0),C(o.$slots,"nav-bar-title-after",{},void 0,!0)],8,Qa)],2))}});const Za=N(Xa,[["__scopeId","data-v-d5925166"]]);const eu={key:0,class:"VPNavBarSearch"},tu={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},nu={class:"DocSearch-Button-Container"},su=b("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[b("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),ou={class:"DocSearch-Button-Placeholder"},iu=b("span",{class:"DocSearch-Button-Keys"},[b("kbd",{class:"DocSearch-Button-Key"}),b("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ru=F({__name:"VPNavBarSearch",setup(e){Uc(r=>({"5943dbe8":o.value}));const t=()=>null,{theme:n}=le(),s=_e(!1),o=_e("'Meta'");De(()=>{if(!n.value.algolia)return;o.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const r=c=>{c.key==="k"&&(c.ctrlKey||c.metaKey)&&(c.preventDefault(),i(),l())},l=()=>{window.removeEventListener("keydown",r)};window.addEventListener("keydown",r),pt(l)});function i(){s.value||(s.value=!0)}return(r,l)=>{var c;return _(n).algolia?(d(),v("div",eu,[s.value?(d(),J(_(t),{key:0})):(d(),v("div",{key:1,id:"docsearch",onClick:i},[b("button",tu,[b("span",nu,[su,b("span",ou,ae(((c=_(n).algolia)==null?void 0:c.buttonText)||"Search"),1)]),iu])]))])):U("",!0)}}});const lu={},cu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},au=b("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),uu=b("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),fu=[au,uu];function du(e,t){return d(),v("svg",cu,fu)}const hu=N(lu,[["render",du]]),_u=F({__name:"VPLink",props:{href:null,noIcon:{type:Boolean}},setup(e){const t=e,n=ne(()=>t.href&&ss.test(t.href));return(s,o)=>(d(),J(to(e.href?"a":"span"),{class:de(["VPLink",{link:e.href}]),href:e.href?_(Hn)(e.href):void 0,target:_(n)?"_blank":void 0,rel:_(n)?"noreferrer":void 0},{default:A(()=>[C(s.$slots,"default",{},void 0,!0),_(n)&&!e.noIcon?(d(),J(hu,{key:0,class:"icon"})):U("",!0)]),_:3},8,["class","href","target","rel"]))}});const Lt=N(_u,[["__scopeId","data-v-3c355974"]]),pu=F({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),J(Lt,{class:de({VPNavBarMenuLink:!0,active:_(Qt)(_(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,noIcon:!0},{default:A(()=>[Ee(ae(e.item.text),1)]),_:1},8,["class","href"]))}});const mu=N(pu,[["__scopeId","data-v-47a2263e"]]),lo=_e();let mr=!1,vs=0;function vu(e){const t=_e(!1);if(typeof window<"u"){!mr&&gu(),vs++;const n=et(lo,s=>{var o,i,r;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(i=e.onFocus)==null||i.call(e)):(t.value=!1,(r=e.onBlur)==null||r.call(e))});pt(()=>{n(),vs--,vs||bu()})}return Js(t)}function gu(){document.addEventListener("focusin",vr),mr=!0,lo.value=document.activeElement}function bu(){document.removeEventListener("focusin",vr)}function vr(){lo.value=document.activeElement}const yu={},xu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ku=b("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),wu=[ku];function $u(e,t){return d(),v("svg",xu,wu)}const gr=N(yu,[["render",$u]]),Pu={},Su={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Cu=b("circle",{cx:"12",cy:"12",r:"2"},null,-1),Tu=b("circle",{cx:"19",cy:"12",r:"2"},null,-1),Vu=b("circle",{cx:"5",cy:"12",r:"2"},null,-1),Eu=[Cu,Tu,Vu];function Lu(e,t){return d(),v("svg",Su,Eu)}const Mu=N(Pu,[["render",Lu]]),Au={class:"VPMenuLink"},Iu=F({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),v("div",Au,[V(Lt,{class:de({active:_(Qt)(_(t).relativePath,e.item.activeMatch||e.item.link)}),href:e.item.link},{default:A(()=>[Ee(ae(e.item.text),1)]),_:1},8,["class","href"])]))}});const os=N(Iu,[["__scopeId","data-v-e8e0fb1d"]]),Nu={class:"VPMenuGroup"},Ou={key:0,class:"title"},Bu=F({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(d(),v("div",Nu,[e.text?(d(),v("p",Ou,ae(e.text),1)):U("",!0),(d(!0),v(G,null,Ce(e.items,s=>(d(),v(G,null,["link"in s?(d(),J(os,{key:0,item:s},null,8,["item"])):U("",!0)],64))),256))]))}});const Hu=N(Bu,[["__scopeId","data-v-9ca52130"]]),Fu={class:"VPMenu"},Ru={key:0,class:"items"},Du=F({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(d(),v("div",Fu,[e.items?(d(),v("div",Ru,[(d(!0),v(G,null,Ce(e.items,s=>(d(),v(G,{key:s.text},["link"in s?(d(),J(os,{key:0,item:s},null,8,["item"])):(d(),J(Hu,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):U("",!0),C(t.$slots,"default",{},void 0,!0)]))}});const zu=N(Du,[["__scopeId","data-v-1c5d0cfc"]]),Uu=["aria-expanded","aria-label"],ju={key:0,class:"text"},Ku={class:"menu"},qu=F({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=_e(!1),n=_e();vu({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(d(),v("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=r=>t.value=!0),onMouseleave:i[2]||(i[2]=r=>t.value=!1)},[b("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=r=>t.value=!t.value)},[e.button||e.icon?(d(),v("span",ju,[e.icon?(d(),J(to(e.icon),{key:0,class:"option-icon"})):U("",!0),Ee(" "+ae(e.button)+" ",1),V(gr,{class:"text-icon"})])):(d(),J(Mu,{key:1,class:"icon"}))],8,Uu),b("div",Ku,[V(zu,{items:e.items},{default:A(()=>[C(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const co=N(qu,[["__scopeId","data-v-6ffb57d3"]]),Ju=F({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),J(co,{class:de({VPNavBarMenuGroup:!0,active:_(Qt)(_(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Wu=e=>(Je("data-v-f83db6ba"),e=e(),We(),e),Gu={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Yu=Wu(()=>b("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Qu=F({__name:"VPNavBarMenu",setup(e){const{theme:t}=le();return(n,s)=>_(t).nav?(d(),v("nav",Gu,[Yu,(d(!0),v(G,null,Ce(_(t).nav,o=>(d(),v(G,{key:o.text},["link"in o?(d(),J(mu,{key:0,item:o},null,8,["item"])):(d(),J(Ju,{key:1,item:o},null,8,["item"]))],64))),128))])):U("",!0)}});const Xu=N(Qu,[["__scopeId","data-v-f83db6ba"]]),Zu={},ef={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},tf=b("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),nf=b("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),sf=[tf,nf];function of(e,t){return d(),v("svg",ef,sf)}const br=N(Zu,[["render",of]]),rf={class:"items"},lf={class:"title"},cf=F({__name:"VPNavBarTranslations",setup(e){const{theme:t}=le();return(n,s)=>_(t).localeLinks?(d(),J(co,{key:0,class:"VPNavBarTranslations",icon:br},{default:A(()=>[b("div",rf,[b("p",lf,ae(_(t).localeLinks.text),1),(d(!0),v(G,null,Ce(_(t).localeLinks.items,o=>(d(),J(os,{key:o.link,item:o},null,8,["item"]))),128))])]),_:1})):U("",!0)}});const af=N(cf,[["__scopeId","data-v-db824e91"]]);const uf={},ff={class:"VPSwitch",type:"button",role:"switch"},df={class:"check"},hf={key:0,class:"icon"};function _f(e,t){return d(),v("button",ff,[b("span",df,[e.$slots.default?(d(),v("span",hf,[C(e.$slots,"default",{},void 0,!0)])):U("",!0)])])}const pf=N(uf,[["render",_f],["__scopeId","data-v-eba7420e"]]),mf={},vf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},gf=dc('',9),bf=[gf];function yf(e,t){return d(),v("svg",vf,bf)}const xf=N(mf,[["render",yf]]),kf={},wf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},$f=b("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Pf=[$f];function Sf(e,t){return d(),v("svg",wf,Pf)}const Cf=N(kf,[["render",Sf]]),Tf=F({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=le(),s=_e(!1),o=typeof localStorage<"u"?i():()=>{};De(()=>{s.value=document.documentElement.classList.contains("dark")});function i(){const r=window.matchMedia("(prefers-color-scheme: dark)"),l=document.documentElement.classList;let c=localStorage.getItem(Zo),f=t.value.appearance==="dark"&&c==null||(c==="auto"||c==null?r.matches:c==="dark");r.onchange=g=>{c==="auto"&&p(f=g.matches)};function h(){p(f=!f),c=f?r.matches?"auto":"dark":r.matches?"light":"auto",localStorage.setItem(Zo,c)}function p(g){const $=document.createElement("style");$.type="text/css",$.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) {
    +function Os(e,t){const n=Object.create(null),s=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}function zn(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(Vr);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function de(e){let t="";if(xe(e))t=e;else if(K(e))for(let n=0;nxe(e)?e:e==null?"":K(e)||ve(e)&&(e.toString===mi||!Q(e.toString))?JSON.stringify(e,hi,2):String(e),hi=(e,t)=>t&&t.__v_isRef?hi(e,t.value):Ot(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o])=>(n[`${s} =>`]=o,n),{})}:_i(t)?{[`Set(${t.size})`]:[...t.values()]}:ve(t)&&!K(t)&&!vi(t)?String(t):t,ge={},Nt=[],qe=()=>{},Ir=()=>!1,Nr=/^on[^a-z]/,pn=e=>Nr.test(e),Bs=e=>e.startsWith("onUpdate:"),we=Object.assign,Hs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Or=Object.prototype.hasOwnProperty,ie=(e,t)=>Or.call(e,t),K=Array.isArray,Ot=e=>Un(e)==="[object Map]",_i=e=>Un(e)==="[object Set]",Q=e=>typeof e=="function",xe=e=>typeof e=="string",Fs=e=>typeof e=="symbol",ve=e=>e!==null&&typeof e=="object",pi=e=>ve(e)&&Q(e.then)&&Q(e.catch),mi=Object.prototype.toString,Un=e=>mi.call(e),Br=e=>Un(e).slice(8,-1),vi=e=>Un(e)==="[object Object]",Rs=e=>xe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tn=Os(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),jn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Hr=/-(\w)/g,tt=jn(e=>e.replace(Hr,(t,n)=>n?n.toUpperCase():"")),Fr=/\B([A-Z])/g,Wt=jn(e=>e.replace(Fr,"-$1").toLowerCase()),Kn=jn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cs=jn(e=>e?`on${Kn(e)}`:""),cn=(e,t)=>!Object.is(e,t),as=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Ds=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let bo;const Rr=()=>bo||(bo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Ie;class Dr{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Ie,!t&&Ie&&(this.index=(Ie.scopes||(Ie.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Ie;try{return Ie=this,t()}finally{Ie=n}}}on(){Ie=this}off(){Ie=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},gi=e=>(e.w&ht)>0,bi=e=>(e.n&ht)>0,Kr=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(h==="length"||h>=c)&&l.push(f)})}else switch(n!==void 0&&l.push(r.get(n)),t){case"add":K(e)?Rs(n)&&l.push(r.get("length")):(l.push(r.get(Ct)),Ot(e)&&l.push(r.get(xs)));break;case"delete":K(e)||(l.push(r.get(Ct)),Ot(e)&&l.push(r.get(xs)));break;case"set":Ot(e)&&l.push(r.get(Ct));break}if(l.length===1)l[0]&&ks(l[0]);else{const c=[];for(const f of l)f&&c.push(...f);ks(zs(c))}}function ks(e,t){const n=K(e)?e:[...e];for(const s of n)s.computed&&xo(s);for(const s of n)s.computed||xo(s)}function xo(e,t){(e!==je||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Jr=Os("__proto__,__v_isRef,__isVue"),ki=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Fs)),Wr=js(),Gr=js(!1,!0),Yr=js(!0),ko=Qr();function Qr(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=ce(this);for(let i=0,r=this.length;i{e[t]=function(...n){Gt();const s=ce(this)[t].apply(this,n);return Yt(),s}}),e}function js(e=!1,t=!1){return function(s,o,i){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&i===(e?t?hl:Ci:t?Si:Pi).get(s))return s;const r=K(s);if(!e&&r&&ie(ko,o))return Reflect.get(ko,o,i);const l=Reflect.get(s,o,i);return(Fs(o)?ki.has(o):Jr(o))||(e||Be(s,"get",o),t)?l:Pe(l)?r&&Rs(o)?l:l.value:ve(l)?e?Js(l):Jn(l):l}}const Xr=wi(),Zr=wi(!0);function wi(e=!1){return function(n,s,o,i){let r=n[s];if(jt(r)&&Pe(r)&&!Pe(o))return!1;if(!e&&(!Ln(o)&&!jt(o)&&(r=ce(r),o=ce(o)),!K(n)&&Pe(r)&&!Pe(o)))return r.value=o,!0;const l=K(n)&&Rs(s)?Number(s)e,qn=e=>Reflect.getPrototypeOf(e);function bn(e,t,n=!1,s=!1){e=e.__v_raw;const o=ce(e),i=ce(t);n||(t!==i&&Be(o,"get",t),Be(o,"get",i));const{has:r}=qn(o),l=s?Ks:n?Gs:an;if(r.call(o,t))return l(e.get(t));if(r.call(o,i))return l(e.get(i));e!==o&&e.get(t)}function yn(e,t=!1){const n=this.__v_raw,s=ce(n),o=ce(e);return t||(e!==o&&Be(s,"has",e),Be(s,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function xn(e,t=!1){return e=e.__v_raw,!t&&Be(ce(e),"iterate",Ct),Reflect.get(e,"size",e)}function wo(e){e=ce(e);const t=ce(this);return qn(t).has.call(t,e)||(t.add(e),ot(t,"add",e,e)),this}function $o(e,t){t=ce(t);const n=ce(this),{has:s,get:o}=qn(n);let i=s.call(n,e);i||(e=ce(e),i=s.call(n,e));const r=o.call(n,e);return n.set(e,t),i?cn(t,r)&&ot(n,"set",e,t):ot(n,"add",e,t),this}function Po(e){const t=ce(this),{has:n,get:s}=qn(t);let o=n.call(t,e);o||(e=ce(e),o=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return o&&ot(t,"delete",e,void 0),i}function So(){const e=ce(this),t=e.size!==0,n=e.clear();return t&&ot(e,"clear",void 0,void 0),n}function kn(e,t){return function(s,o){const i=this,r=i.__v_raw,l=ce(r),c=t?Ks:e?Gs:an;return!e&&Be(l,"iterate",Ct),r.forEach((f,h)=>s.call(o,c(f),c(h),i))}}function wn(e,t,n){return function(...s){const o=this.__v_raw,i=ce(o),r=Ot(i),l=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,f=o[e](...s),h=n?Ks:t?Gs:an;return!t&&Be(i,"iterate",c?xs:Ct),{next(){const{value:p,done:g}=f.next();return g?{value:p,done:g}:{value:l?[h(p[0]),h(p[1])]:h(p),done:g}},[Symbol.iterator](){return this}}}}function rt(e){return function(...t){return e==="delete"?!1:this}}function il(){const e={get(i){return bn(this,i)},get size(){return xn(this)},has:yn,add:wo,set:$o,delete:Po,clear:So,forEach:kn(!1,!1)},t={get(i){return bn(this,i,!1,!0)},get size(){return xn(this)},has:yn,add:wo,set:$o,delete:Po,clear:So,forEach:kn(!1,!0)},n={get(i){return bn(this,i,!0)},get size(){return xn(this,!0)},has(i){return yn.call(this,i,!0)},add:rt("add"),set:rt("set"),delete:rt("delete"),clear:rt("clear"),forEach:kn(!0,!1)},s={get(i){return bn(this,i,!0,!0)},get size(){return xn(this,!0)},has(i){return yn.call(this,i,!0)},add:rt("add"),set:rt("set"),delete:rt("delete"),clear:rt("clear"),forEach:kn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=wn(i,!1,!1),n[i]=wn(i,!0,!1),t[i]=wn(i,!1,!0),s[i]=wn(i,!0,!0)}),[e,n,t,s]}const[rl,ll,cl,al]=il();function qs(e,t){const n=t?e?al:cl:e?ll:rl;return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(ie(n,o)&&o in s?n:s,o,i)}const ul={get:qs(!1,!1)},fl={get:qs(!1,!0)},dl={get:qs(!0,!1)},Pi=new WeakMap,Si=new WeakMap,Ci=new WeakMap,hl=new WeakMap;function _l(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pl(e){return e.__v_skip||!Object.isExtensible(e)?0:_l(Br(e))}function Jn(e){return jt(e)?e:Ws(e,!1,$i,ul,Pi)}function ml(e){return Ws(e,!1,ol,fl,Si)}function Js(e){return Ws(e,!0,sl,dl,Ci)}function Ws(e,t,n,s,o){if(!ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const r=pl(e);if(r===0)return e;const l=new Proxy(e,r===2?s:n);return o.set(e,l),l}function Bt(e){return jt(e)?Bt(e.__v_raw):!!(e&&e.__v_isReactive)}function jt(e){return!!(e&&e.__v_isReadonly)}function Ln(e){return!!(e&&e.__v_isShallow)}function Ti(e){return Bt(e)||jt(e)}function ce(e){const t=e&&e.__v_raw;return t?ce(t):e}function nn(e){return En(e,"__v_skip",!0),e}const an=e=>ve(e)?Jn(e):e,Gs=e=>ve(e)?Js(e):e;function Vi(e){ft&&je&&(e=ce(e),xi(e.dep||(e.dep=zs())))}function Ei(e,t){e=ce(e),e.dep&&ks(e.dep)}function Pe(e){return!!(e&&e.__v_isRef===!0)}function _e(e){return Li(e,!1)}function vl(e){return Li(e,!0)}function Li(e,t){return Pe(e)?e:new gl(e,t)}class gl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ce(t),this._value=n?t:an(t)}get value(){return Vi(this),this._value}set value(t){const n=this.__v_isShallow||Ln(t)||jt(t);t=n?t:ce(t),cn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:an(t),Ei(this))}}function _(e){return Pe(e)?e.value:e}const bl={get:(e,t,n)=>_(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Pe(o)&&!Pe(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Mi(e){return Bt(e)?e:new Proxy(e,bl)}var Ai;class yl{constructor(t,n,s,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ai]=!1,this._dirty=!0,this.effect=new Us(t,()=>{this._dirty||(this._dirty=!0,Ei(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const t=ce(this);return Vi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ai="__v_isReadonly";function xl(e,t,n=!1){let s,o;const i=Q(e);return i?(s=e,o=qe):(s=e.get,o=e.set),new yl(s,o,i||!o,n)}function dt(e,t,n,s){let o;try{o=s?e(...s):e()}catch(i){Wn(i,t,n)}return o}function Re(e,t,n,s){if(Q(e)){const i=dt(e,t,n,s);return i&&pi(i)&&i.catch(r=>{Wn(r,t,n)}),i}const o=[];for(let i=0;i>>1;fn($e[s])Ze&&$e.splice(t,1)}function Pl(e){K(e)?Ht.push(...e):(!st||!st.includes(e,e.allowRecurse?wt+1:wt))&&Ht.push(e),Ni()}function Co(e,t=un?Ze+1:0){for(;t<$e.length;t++){const n=$e[t];n&&n.pre&&($e.splice(t,1),t--,n())}}function Mn(e){if(Ht.length){const t=[...new Set(Ht)];if(Ht.length=0,st){st.push(...t);return}for(st=t,st.sort((n,s)=>fn(n)-fn(s)),wt=0;wte.id==null?1/0:e.id,Sl=(e,t)=>{const n=fn(e)-fn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Oi(e){ws=!1,un=!0,$e.sort(Sl);const t=qe;try{for(Ze=0;Ze<$e.length;Ze++){const n=$e[Ze];n&&n.active!==!1&&dt(n,null,14)}}finally{Ze=0,$e.length=0,Mn(),un=!1,Ys=null,($e.length||Ht.length)&&Oi()}}function Cl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ge;let o=n;const i=t.startsWith("update:"),r=i&&t.slice(7);if(r&&r in s){const h=`${r==="modelValue"?"model":r}Modifiers`,{number:p,trim:g}=s[h]||ge;g&&(o=n.map($=>xe($)?$.trim():$)),p&&(o=n.map(Ds))}let l,c=s[l=cs(t)]||s[l=cs(tt(t))];!c&&i&&(c=s[l=cs(Wt(t))]),c&&Re(c,e,6,o);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(f,e,6,o)}}function Bi(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let r={},l=!1;if(!Q(e)){const c=f=>{const h=Bi(f,t,!0);h&&(l=!0,we(r,h))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ve(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>r[c]=null):we(r,i),ve(e)&&s.set(e,r),r)}function Gn(e,t){return!e||!pn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Wt(t))||ie(e,t))}let Se=null,Yn=null;function An(e){const t=Se;return Se=e,Yn=e&&e.type.__scopeId||null,t}function Je(e){Yn=e}function We(){Yn=null}function A(e,t=Se,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Bo(-1);const i=An(t);let r;try{r=e(...o)}finally{An(i),s._d&&Bo(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function us(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:i,propsOptions:[r],slots:l,attrs:c,emit:f,render:h,renderCache:p,data:g,setupState:$,ctx:j,inheritAttrs:H}=e;let se,k;const E=An(e);try{if(n.shapeFlag&4){const W=o||s;se=Ue(h.call(W,W,p,i,$,g,j)),k=c}else{const W=t;se=Ue(W.length>1?W(i,{attrs:c,slots:l,emit:f}):W(i,null)),k=t.props?c:Tl(c)}}catch(W){on.length=0,Wn(W,e,1),se=V(Oe)}let I=se;if(k&&H!==!1){const W=Object.keys(k),{shapeFlag:Z}=I;W.length&&Z&7&&(r&&W.some(Bs)&&(k=Vl(k,r)),I=_t(I,k))}return n.dirs&&(I=_t(I),I.dirs=I.dirs?I.dirs.concat(n.dirs):n.dirs),n.transition&&(I.transition=n.transition),se=I,An(E),se}const Tl=e=>{let t;for(const n in e)(n==="class"||n==="style"||pn(n))&&((t||(t={}))[n]=e[n]);return t},Vl=(e,t)=>{const n={};for(const s in e)(!Bs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function El(e,t,n){const{props:s,children:o,component:i}=e,{props:r,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?To(s,r,f):!!r;if(c&8){const h=t.dynamicProps;for(let p=0;pe.__isSuspense;function Hi(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Pl(e)}function Ft(e,t){if(ke){let n=ke.provides;const s=ke.parent&&ke.parent.provides;s===n&&(n=ke.provides=Object.create(s)),n[e]=t}}function Ne(e,t,n=!1){const s=ke||Se;if(s){const o=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&Q(t)?t.call(s.proxy):t}}function Vt(e,t){return Qn(e,null,t)}function Fi(e,t){return Qn(e,null,{flush:"post"})}const $n={};function et(e,t,n){return Qn(e,t,n)}function Qn(e,t,{immediate:n,deep:s,flush:o,onTrack:i,onTrigger:r}=ge){const l=ke;let c,f=!1,h=!1;if(Pe(e)?(c=()=>e.value,f=Ln(e)):Bt(e)?(c=()=>e,s=!0):K(e)?(h=!0,f=e.some(I=>Bt(I)||Ln(I)),c=()=>e.map(I=>{if(Pe(I))return I.value;if(Bt(I))return It(I);if(Q(I))return dt(I,l,2)})):Q(e)?t?c=()=>dt(e,l,2):c=()=>{if(!(l&&l.isUnmounted))return p&&p(),Re(e,l,3,[g])}:c=qe,t&&s){const I=c;c=()=>It(I())}let p,g=I=>{p=k.onStop=()=>{dt(I,l,4)}},$;if(hn)if(g=qe,t?n&&Re(t,l,3,[c(),h?[]:void 0,g]):c(),o==="sync"){const I=$c();$=I.__watcherHandles||(I.__watcherHandles=[])}else return qe;let j=h?new Array(e.length).fill($n):$n;const H=()=>{if(k.active)if(t){const I=k.run();(s||f||(h?I.some((W,Z)=>cn(W,j[Z])):cn(I,j)))&&(p&&p(),Re(t,l,3,[I,j===$n?void 0:h&&j[0]===$n?[]:j,g]),j=I)}else k.run()};H.allowRecurse=!!t;let se;o==="sync"?se=H:o==="post"?se=()=>Le(H,l&&l.suspense):(H.pre=!0,l&&(H.id=l.uid),se=()=>Xs(H));const k=new Us(c,se);t?n?H():j=k.run():o==="post"?Le(k.run.bind(k),l&&l.suspense):k.run();const E=()=>{k.stop(),l&&l.scope&&Hs(l.scope.effects,k)};return $&&$.push(E),E}function Al(e,t,n){const s=this.proxy,o=xe(e)?e.includes(".")?Ri(s,e):()=>s[e]:e.bind(s,s);let i;Q(t)?i=t:(i=t.handler,n=t);const r=ke;qt(this);const l=Qn(o,i.bind(s),n);return r?qt(r):Tt(),l}function Ri(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{It(n,t)});else if(vi(e))for(const n in e)It(e[n],t);return e}function Il(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return De(()=>{e.isMounted=!0}),Ki(()=>{e.isUnmounting=!0}),e}const He=[Function,Array],Nl={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:He,onEnter:He,onAfterEnter:He,onEnterCancelled:He,onBeforeLeave:He,onLeave:He,onAfterLeave:He,onLeaveCancelled:He,onBeforeAppear:He,onAppear:He,onAfterAppear:He,onAppearCancelled:He},setup(e,{slots:t}){const n=ts(),s=Il();let o;return()=>{const i=t.default&&Ui(t.default(),!0);if(!i||!i.length)return;let r=i[0];if(i.length>1){for(const H of i)if(H.type!==Oe){r=H;break}}const l=ce(e),{mode:c}=l;if(s.isLeaving)return fs(r);const f=Vo(r);if(!f)return fs(r);const h=$s(f,l,s,n);Ps(f,h);const p=n.subTree,g=p&&Vo(p);let $=!1;const{getTransitionKey:j}=f.type;if(j){const H=j();o===void 0?o=H:H!==o&&(o=H,$=!0)}if(g&&g.type!==Oe&&(!$t(f,g)||$)){const H=$s(g,l,s,n);if(Ps(g,H),c==="out-in")return s.isLeaving=!0,H.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},fs(r);c==="in-out"&&f.type!==Oe&&(H.delayLeave=(se,k,E)=>{const I=zi(s,g);I[String(g.key)]=g,se._leaveCb=()=>{k(),se._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=E})}return r}}},Di=Nl;function zi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function $s(e,t,n,s){const{appear:o,mode:i,persisted:r=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:g,onAfterLeave:$,onLeaveCancelled:j,onBeforeAppear:H,onAppear:se,onAfterAppear:k,onAppearCancelled:E}=t,I=String(e.key),W=zi(n,e),Z=(M,X)=>{M&&Re(M,s,9,X)},he=(M,X)=>{const Y=X[1];Z(M,X),K(M)?M.every(re=>re.length<=1)&&Y():M.length<=1&&Y()},oe={mode:i,persisted:r,beforeEnter(M){let X=l;if(!n.isMounted)if(o)X=H||l;else return;M._leaveCb&&M._leaveCb(!0);const Y=W[I];Y&&$t(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),Z(X,[M])},enter(M){let X=c,Y=f,re=h;if(!n.isMounted)if(o)X=se||c,Y=k||f,re=E||h;else return;let O=!1;const ee=M._enterCb=R=>{O||(O=!0,R?Z(re,[M]):Z(Y,[M]),oe.delayedLeave&&oe.delayedLeave(),M._enterCb=void 0)};X?he(X,[M,ee]):ee()},leave(M,X){const Y=String(e.key);if(M._enterCb&&M._enterCb(!0),n.isUnmounting)return X();Z(p,[M]);let re=!1;const O=M._leaveCb=ee=>{re||(re=!0,X(),ee?Z(j,[M]):Z($,[M]),M._leaveCb=void 0,W[Y]===e&&delete W[Y])};W[Y]=e,g?he(g,[M,O]):O()},clone(M){return $s(M,t,n,s)}};return oe}function fs(e){if(Xn(e))return e=_t(e),e.children=null,e}function Vo(e){return Xn(e)?e.children?e.children[0]:void 0:e}function Ps(e,t){e.shapeFlag&6&&e.component?Ps(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ui(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,Xn=e=>e.type.__isKeepAlive;function Ol(e,t){ji(e,"a",t)}function Bl(e,t){ji(e,"da",t)}function ji(e,t,n=ke){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Zn(t,s,n),n){let o=n.parent;for(;o&&o.parent;)Xn(o.parent.vnode)&&Hl(s,t,n,o),o=o.parent}}function Hl(e,t,n,s){const o=Zn(t,e,s,!0);pt(()=>{Hs(s[t],o)},n)}function Zn(e,t,n=ke,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Gt(),qt(n);const l=Re(t,n,e,r);return Tt(),Yt(),l});return s?o.unshift(i):o.push(i),i}}const it=e=>(t,n=ke)=>(!hn||e==="sp")&&Zn(e,(...s)=>t(...s),n),Fl=it("bm"),De=it("m"),Rl=it("bu"),Zs=it("u"),Ki=it("bum"),pt=it("um"),Dl=it("sp"),zl=it("rtg"),Ul=it("rtc");function jl(e,t=ke){Zn("ec",e,t)}function Xe(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let r=0;rt(r,l,void 0,i&&i[l]));else{const r=Object.keys(e);o=new Array(r.length);for(let l=0,c=r.length;lOn(t)?!(t.type===Oe||t.type===G&&!Wi(t.children)):!0)?e:null}const Ss=e=>e?ir(e)?io(e)||e.proxy:Ss(e.parent):null,sn=we(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$emit:e=>e.emit,$options:e=>no(e),$forceUpdate:e=>e.f||(e.f=()=>Xs(e.update)),$nextTick:e=>e.n||(e.n=Qs.bind(e.proxy)),$watch:e=>Al.bind(e)}),ds=(e,t)=>e!==ge&&!e.__isScriptSetup&&ie(e,t),Kl={get({_:e},t){const{ctx:n,setupState:s,data:o,props:i,accessCache:r,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const $=r[t];if($!==void 0)switch($){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return r[t]=1,s[t];if(o!==ge&&ie(o,t))return r[t]=2,o[t];if((f=e.propsOptions[0])&&ie(f,t))return r[t]=3,i[t];if(n!==ge&&ie(n,t))return r[t]=4,n[t];Cs&&(r[t]=0)}}const h=sn[t];let p,g;if(h)return t==="$attrs"&&Be(e,"get",t),h(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==ge&&ie(n,t))return r[t]=4,n[t];if(g=c.config.globalProperties,ie(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return ds(o,t)?(o[t]=n,!0):s!==ge&&ie(s,t)?(s[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i}},r){let l;return!!n[r]||e!==ge&&ie(e,r)||ds(t,r)||(l=i[0])&&ie(l,r)||ie(s,r)||ie(sn,r)||ie(o.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Cs=!0;function ql(e){const t=no(e),n=e.proxy,s=e.ctx;Cs=!1,t.beforeCreate&&Lo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:l,provide:c,inject:f,created:h,beforeMount:p,mounted:g,beforeUpdate:$,updated:j,activated:H,deactivated:se,beforeDestroy:k,beforeUnmount:E,destroyed:I,unmounted:W,render:Z,renderTracked:he,renderTriggered:oe,errorCaptured:M,serverPrefetch:X,expose:Y,inheritAttrs:re,components:O,directives:ee,filters:R}=t;if(f&&Jl(f,s,null,e.appContext.config.unwrapInjectedRef),r)for(const be in r){const pe=r[be];Q(pe)&&(s[be]=pe.bind(n))}if(o){const be=o.call(n,n);ve(be)&&(e.data=Jn(be))}if(Cs=!0,i)for(const be in i){const pe=i[be],vt=Q(pe)?pe.bind(n,n):Q(pe.get)?pe.get.bind(n,n):qe,vn=!Q(pe)&&Q(pe.set)?pe.set.bind(n):qe,gt=ne({get:vt,set:vn});Object.defineProperty(s,be,{enumerable:!0,configurable:!0,get:()=>gt.value,set:Ye=>gt.value=Ye})}if(l)for(const be in l)Gi(l[be],s,n,be);if(c){const be=Q(c)?c.call(n):c;Reflect.ownKeys(be).forEach(pe=>{Ft(pe,be[pe])})}h&&Lo(h,e,"c");function ue(be,pe){K(pe)?pe.forEach(vt=>be(vt.bind(n))):pe&&be(pe.bind(n))}if(ue(Fl,p),ue(De,g),ue(Rl,$),ue(Zs,j),ue(Ol,H),ue(Bl,se),ue(jl,M),ue(Ul,he),ue(zl,oe),ue(Ki,E),ue(pt,W),ue(Dl,X),K(Y))if(Y.length){const be=e.exposed||(e.exposed={});Y.forEach(pe=>{Object.defineProperty(be,pe,{get:()=>n[pe],set:vt=>n[pe]=vt})})}else e.exposed||(e.exposed={});Z&&e.render===qe&&(e.render=Z),re!=null&&(e.inheritAttrs=re),O&&(e.components=O),ee&&(e.directives=ee)}function Jl(e,t,n=qe,s=!1){K(e)&&(e=Ts(e));for(const o in e){const i=e[o];let r;ve(i)?"default"in i?r=Ne(i.from||o,i.default,!0):r=Ne(i.from||o):r=Ne(i),Pe(r)&&s?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:l=>r.value=l}):t[o]=r}}function Lo(e,t,n){Re(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gi(e,t,n,s){const o=s.includes(".")?Ri(n,s):()=>n[s];if(xe(e)){const i=t[e];Q(i)&&et(o,i)}else if(Q(e))et(o,e.bind(n));else if(ve(e))if(K(e))e.forEach(i=>Gi(i,t,n,s));else{const i=Q(e.handler)?e.handler.bind(n):t[e.handler];Q(i)&&et(o,i,e)}}function no(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,l=i.get(t);let c;return l?c=l:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(f=>In(c,f,r,!0)),In(c,t,r)),ve(t)&&i.set(t,c),c}function In(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&In(e,i,n,!0),o&&o.forEach(r=>In(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const l=Wl[r]||n&&n[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const Wl={data:Mo,props:kt,emits:kt,methods:kt,computed:kt,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:kt,directives:kt,watch:Yl,provide:Mo,inject:Gl};function Mo(e,t){return t?e?function(){return we(Q(e)?e.call(this,this):e,Q(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return kt(Ts(e),Ts(t))}function Ts(e){if(K(e)){const t={};for(let n=0;n0)&&!(r&16)){if(r&8){const h=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[g,$]=Qi(p,t,!0);we(r,g),$&&l.push(...$)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!c)return ve(e)&&s.set(e,Nt),Nt;if(K(i))for(let h=0;h-1,$[1]=H<0||j-1||ie($,"default"))&&l.push(p)}}}const f=[r,l];return ve(e)&&s.set(e,f),f}function Ao(e){return e[0]!=="$"}function Io(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function No(e,t){return Io(e)===Io(t)}function Oo(e,t){return K(t)?t.findIndex(n=>No(n,e)):Q(t)&&No(t,e)?0:-1}const Xi=e=>e[0]==="_"||e==="$stable",so=e=>K(e)?e.map(Ue):[Ue(e)],Zl=(e,t,n)=>{if(t._n)return t;const s=A((...o)=>so(t(...o)),n);return s._c=!1,s},Zi=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Xi(o))continue;const i=e[o];if(Q(i))t[o]=Zl(o,i,s);else if(i!=null){const r=so(i);t[o]=()=>r}}},er=(e,t)=>{const n=so(t);e.slots.default=()=>n},ec=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ce(t),En(t,"_",n)):Zi(t,e.slots={})}else e.slots={},t&&er(e,t);En(e.slots,es,1)},tc=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,r=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(we(o,t),!n&&l===1&&delete o._):(i=!t.$stable,Zi(t,o)),r=t}else t&&(er(e,t),r={default:1});if(i)for(const l in o)!Xi(l)&&!(l in r)&&delete o[l]};function tr(){return{app:null,config:{isNativeTag:Ir,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let nc=0;function sc(e,t){return function(s,o=null){Q(s)||(s=Object.assign({},s)),o!=null&&!ve(o)&&(o=null);const i=tr(),r=new Set;let l=!1;const c=i.app={_uid:nc++,_component:s,_props:o,_container:null,_context:i,_instance:null,version:Pc,get config(){return i.config},set config(f){},use(f,...h){return r.has(f)||(f&&Q(f.install)?(r.add(f),f.install(c,...h)):Q(f)&&(r.add(f),f(c,...h))),c},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),c},component(f,h){return h?(i.components[f]=h,c):i.components[f]},directive(f,h){return h?(i.directives[f]=h,c):i.directives[f]},mount(f,h,p){if(!l){const g=V(s,o);return g.appContext=i,h&&t?t(g,f):e(g,f,p),l=!0,c._container=f,f.__vue_app__=c,io(g.component)||g.component.proxy}},unmount(){l&&(e(null,c._container),delete c._container.__vue_app__)},provide(f,h){return i.provides[f]=h,c}};return c}}function Nn(e,t,n,s,o=!1){if(K(e)){e.forEach((g,$)=>Nn(g,t&&(K(t)?t[$]:t),n,s,o));return}if(Rt(s)&&!o)return;const i=s.shapeFlag&4?io(s.component)||s.component.proxy:s.el,r=o?null:i,{i:l,r:c}=e,f=t&&t.r,h=l.refs===ge?l.refs={}:l.refs,p=l.setupState;if(f!=null&&f!==c&&(xe(f)?(h[f]=null,ie(p,f)&&(p[f]=null)):Pe(f)&&(f.value=null)),Q(c))dt(c,l,12,[r,h]);else{const g=xe(c),$=Pe(c);if(g||$){const j=()=>{if(e.f){const H=g?ie(p,c)?p[c]:h[c]:c.value;o?K(H)&&Hs(H,i):K(H)?H.includes(i)||H.push(i):g?(h[c]=[i],ie(p,c)&&(p[c]=h[c])):(c.value=[i],e.k&&(h[e.k]=c.value))}else g?(h[c]=r,ie(p,c)&&(p[c]=r)):$&&(c.value=r,e.k&&(h[e.k]=r))};r?(j.id=-1,Le(j,n)):j()}}}let lt=!1;const Pn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Sn=e=>e.nodeType===8;function oc(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:r,remove:l,insert:c,createComment:f}}=e,h=(k,E)=>{if(!E.hasChildNodes()){n(null,k,E),Mn(),E._vnode=k;return}lt=!1,p(E.firstChild,k,null,null,null),Mn(),E._vnode=k,lt&&console.error("Hydration completed but contains mismatches.")},p=(k,E,I,W,Z,he=!1)=>{const oe=Sn(k)&&k.data==="[",M=()=>H(k,E,I,W,Z,oe),{type:X,ref:Y,shapeFlag:re,patchFlag:O}=E;let ee=k.nodeType;E.el=k,O===-2&&(he=!1,E.dynamicChildren=null);let R=null;switch(X){case Kt:ee!==3?E.children===""?(c(E.el=o(""),r(k),k),R=k):R=M():(k.data!==E.children&&(lt=!0,k.data=E.children),R=i(k));break;case Oe:ee!==8||oe?R=M():R=i(k);break;case Dt:if(oe&&(k=i(k),ee=k.nodeType),ee===1||ee===3){R=k;const Me=!E.children.length;for(let ue=0;ue{he=he||!!E.dynamicChildren;const{type:oe,props:M,patchFlag:X,shapeFlag:Y,dirs:re}=E,O=oe==="input"&&re||oe==="option";if(O||X!==-1){if(re&&Xe(E,null,I,"created"),M)if(O||!he||X&48)for(const R in M)(O&&R.endsWith("value")||pn(R)&&!tn(R))&&s(k,R,null,M[R],!1,void 0,I);else M.onClick&&s(k,"onClick",null,M.onClick,!1,void 0,I);let ee;if((ee=M&&M.onVnodeBeforeMount)&&Fe(ee,I,E),re&&Xe(E,null,I,"beforeMount"),((ee=M&&M.onVnodeMounted)||re)&&Hi(()=>{ee&&Fe(ee,I,E),re&&Xe(E,null,I,"mounted")},W),Y&16&&!(M&&(M.innerHTML||M.textContent))){let R=$(k.firstChild,E,k,I,W,Z,he);for(;R;){lt=!0;const Me=R;R=R.nextSibling,l(Me)}}else Y&8&&k.textContent!==E.children&&(lt=!0,k.textContent=E.children)}return k.nextSibling},$=(k,E,I,W,Z,he,oe)=>{oe=oe||!!E.dynamicChildren;const M=E.children,X=M.length;for(let Y=0;Y{const{slotScopeIds:oe}=E;oe&&(Z=Z?Z.concat(oe):oe);const M=r(k),X=$(i(k),E,M,I,W,Z,he);return X&&Sn(X)&&X.data==="]"?i(E.anchor=X):(lt=!0,c(E.anchor=f("]"),M,X),X)},H=(k,E,I,W,Z,he)=>{if(lt=!0,E.el=null,he){const X=se(k);for(;;){const Y=i(k);if(Y&&Y!==X)l(Y);else break}}const oe=i(k),M=r(k);return l(k),n(null,E,M,oe,I,W,Pn(M),Z),oe},se=k=>{let E=0;for(;k;)if(k=i(k),k&&Sn(k)&&(k.data==="["&&E++,k.data==="]")){if(E===0)return i(k);E--}return k};return[h,p]}const Le=Hi;function ic(e){return rc(e,oc)}function rc(e,t){const n=Rr();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:r,createText:l,createComment:c,setText:f,setElementText:h,parentNode:p,nextSibling:g,setScopeId:$=qe,insertStaticContent:j}=e,H=(a,u,m,x=null,y=null,S=null,L=!1,P=null,T=!!u.dynamicChildren)=>{if(a===u)return;a&&!$t(a,u)&&(x=gn(a),Ye(a,y,S,!0),a=null),u.patchFlag===-2&&(T=!1,u.dynamicChildren=null);const{type:w,ref:D,shapeFlag:B}=u;switch(w){case Kt:se(a,u,m,x);break;case Oe:k(a,u,m,x);break;case Dt:a==null&&E(u,m,x,L);break;case G:O(a,u,m,x,y,S,L,P,T);break;default:B&1?Z(a,u,m,x,y,S,L,P,T):B&6?ee(a,u,m,x,y,S,L,P,T):(B&64||B&128)&&w.process(a,u,m,x,y,S,L,P,T,Mt)}D!=null&&y&&Nn(D,a&&a.ref,S,u||a,!u)},se=(a,u,m,x)=>{if(a==null)s(u.el=l(u.children),m,x);else{const y=u.el=a.el;u.children!==a.children&&f(y,u.children)}},k=(a,u,m,x)=>{a==null?s(u.el=c(u.children||""),m,x):u.el=a.el},E=(a,u,m,x)=>{[a.el,a.anchor]=j(a.children,u,m,x,a.el,a.anchor)},I=({el:a,anchor:u},m,x)=>{let y;for(;a&&a!==u;)y=g(a),s(a,m,x),a=y;s(u,m,x)},W=({el:a,anchor:u})=>{let m;for(;a&&a!==u;)m=g(a),o(a),a=m;o(u)},Z=(a,u,m,x,y,S,L,P,T)=>{L=L||u.type==="svg",a==null?he(u,m,x,y,S,L,P,T):X(a,u,y,S,L,P,T)},he=(a,u,m,x,y,S,L,P)=>{let T,w;const{type:D,props:B,shapeFlag:z,transition:q,dirs:te}=a;if(T=a.el=r(a.type,S,B&&B.is,B),z&8?h(T,a.children):z&16&&M(a.children,T,null,x,y,S&&D!=="foreignObject",L,P),te&&Xe(a,null,x,"created"),B){for(const fe in B)fe!=="value"&&!tn(fe)&&i(T,fe,null,B[fe],S,a.children,x,y,nt);"value"in B&&i(T,"value",null,B.value),(w=B.onVnodeBeforeMount)&&Fe(w,x,a)}oe(T,a,a.scopeId,L,x),te&&Xe(a,null,x,"beforeMount");const me=(!y||y&&!y.pendingBranch)&&q&&!q.persisted;me&&q.beforeEnter(T),s(T,u,m),((w=B&&B.onVnodeMounted)||me||te)&&Le(()=>{w&&Fe(w,x,a),me&&q.enter(T),te&&Xe(a,null,x,"mounted")},y)},oe=(a,u,m,x,y)=>{if(m&&$(a,m),x)for(let S=0;S{for(let w=T;w{const P=u.el=a.el;let{patchFlag:T,dynamicChildren:w,dirs:D}=u;T|=a.patchFlag&16;const B=a.props||ge,z=u.props||ge;let q;m&&bt(m,!1),(q=z.onVnodeBeforeUpdate)&&Fe(q,m,u,a),D&&Xe(u,a,m,"beforeUpdate"),m&&bt(m,!0);const te=y&&u.type!=="foreignObject";if(w?Y(a.dynamicChildren,w,P,m,x,te,S):L||pe(a,u,P,null,m,x,te,S,!1),T>0){if(T&16)re(P,u,B,z,m,x,y);else if(T&2&&B.class!==z.class&&i(P,"class",null,z.class,y),T&4&&i(P,"style",B.style,z.style,y),T&8){const me=u.dynamicProps;for(let fe=0;fe{q&&Fe(q,m,u,a),D&&Xe(u,a,m,"updated")},x)},Y=(a,u,m,x,y,S,L)=>{for(let P=0;P{if(m!==x){if(m!==ge)for(const P in m)!tn(P)&&!(P in x)&&i(a,P,m[P],null,L,u.children,y,S,nt);for(const P in x){if(tn(P))continue;const T=x[P],w=m[P];T!==w&&P!=="value"&&i(a,P,w,T,L,u.children,y,S,nt)}"value"in x&&i(a,"value",m.value,x.value)}},O=(a,u,m,x,y,S,L,P,T)=>{const w=u.el=a?a.el:l(""),D=u.anchor=a?a.anchor:l("");let{patchFlag:B,dynamicChildren:z,slotScopeIds:q}=u;q&&(P=P?P.concat(q):q),a==null?(s(w,m,x),s(D,m,x),M(u.children,m,D,y,S,L,P,T)):B>0&&B&64&&z&&a.dynamicChildren?(Y(a.dynamicChildren,z,m,y,S,L,P),(u.key!=null||y&&u===y.subTree)&&nr(a,u,!0)):pe(a,u,m,D,y,S,L,P,T)},ee=(a,u,m,x,y,S,L,P,T)=>{u.slotScopeIds=P,a==null?u.shapeFlag&512?y.ctx.activate(u,m,x,L,T):R(u,m,x,y,S,L,T):Me(a,u,T)},R=(a,u,m,x,y,S,L)=>{const P=a.component=pc(a,x,y);if(Xn(a)&&(P.ctx.renderer=Mt),mc(P),P.asyncDep){if(y&&y.registerDep(P,ue),!a.el){const T=P.subTree=V(Oe);k(null,T,u,m)}return}ue(P,a,u,m,y,S,L)},Me=(a,u,m)=>{const x=u.component=a.component;if(El(a,u,m))if(x.asyncDep&&!x.asyncResolved){be(x,u,m);return}else x.next=u,$l(x.update),x.update();else u.el=a.el,x.vnode=u},ue=(a,u,m,x,y,S,L)=>{const P=()=>{if(a.isMounted){let{next:D,bu:B,u:z,parent:q,vnode:te}=a,me=D,fe;bt(a,!1),D?(D.el=te.el,be(a,D,L)):D=te,B&&as(B),(fe=D.props&&D.props.onVnodeBeforeUpdate)&&Fe(fe,q,D,te),bt(a,!0);const ye=us(a),ze=a.subTree;a.subTree=ye,H(ze,ye,p(ze.el),gn(ze),a,y,S),D.el=ye.el,me===null&&Ll(a,ye.el),z&&Le(z,y),(fe=D.props&&D.props.onVnodeUpdated)&&Le(()=>Fe(fe,q,D,te),y)}else{let D;const{el:B,props:z}=u,{bm:q,m:te,parent:me}=a,fe=Rt(u);if(bt(a,!1),q&&as(q),!fe&&(D=z&&z.onVnodeBeforeMount)&&Fe(D,me,u),bt(a,!0),B&&ls){const ye=()=>{a.subTree=us(a),ls(B,a.subTree,a,y,null)};fe?u.type.__asyncLoader().then(()=>!a.isUnmounted&&ye()):ye()}else{const ye=a.subTree=us(a);H(null,ye,m,x,a,y,S),u.el=ye.el}if(te&&Le(te,y),!fe&&(D=z&&z.onVnodeMounted)){const ye=u;Le(()=>Fe(D,me,ye),y)}(u.shapeFlag&256||me&&Rt(me.vnode)&&me.vnode.shapeFlag&256)&&a.a&&Le(a.a,y),a.isMounted=!0,u=m=x=null}},T=a.effect=new Us(P,()=>Xs(w),a.scope),w=a.update=()=>T.run();w.id=a.uid,bt(a,!0),w()},be=(a,u,m)=>{u.component=a;const x=a.vnode.props;a.vnode=u,a.next=null,Xl(a,u.props,x,m),tc(a,u.children,m),Gt(),Co(),Yt()},pe=(a,u,m,x,y,S,L,P,T=!1)=>{const w=a&&a.children,D=a?a.shapeFlag:0,B=u.children,{patchFlag:z,shapeFlag:q}=u;if(z>0){if(z&128){vn(w,B,m,x,y,S,L,P,T);return}else if(z&256){vt(w,B,m,x,y,S,L,P,T);return}}q&8?(D&16&&nt(w,y,S),B!==w&&h(m,B)):D&16?q&16?vn(w,B,m,x,y,S,L,P,T):nt(w,y,S,!0):(D&8&&h(m,""),q&16&&M(B,m,x,y,S,L,P,T))},vt=(a,u,m,x,y,S,L,P,T)=>{a=a||Nt,u=u||Nt;const w=a.length,D=u.length,B=Math.min(w,D);let z;for(z=0;zD?nt(a,y,S,!0,!1,B):M(u,m,x,y,S,L,P,T,B)},vn=(a,u,m,x,y,S,L,P,T)=>{let w=0;const D=u.length;let B=a.length-1,z=D-1;for(;w<=B&&w<=z;){const q=a[w],te=u[w]=T?ut(u[w]):Ue(u[w]);if($t(q,te))H(q,te,m,null,y,S,L,P,T);else break;w++}for(;w<=B&&w<=z;){const q=a[B],te=u[z]=T?ut(u[z]):Ue(u[z]);if($t(q,te))H(q,te,m,null,y,S,L,P,T);else break;B--,z--}if(w>B){if(w<=z){const q=z+1,te=qz)for(;w<=B;)Ye(a[w],y,S,!0),w++;else{const q=w,te=w,me=new Map;for(w=te;w<=z;w++){const Ae=u[w]=T?ut(u[w]):Ue(u[w]);Ae.key!=null&&me.set(Ae.key,w)}let fe,ye=0;const ze=z-te+1;let At=!1,mo=0;const Xt=new Array(ze);for(w=0;w=ze){Ye(Ae,y,S,!0);continue}let Qe;if(Ae.key!=null)Qe=me.get(Ae.key);else for(fe=te;fe<=z;fe++)if(Xt[fe-te]===0&&$t(Ae,u[fe])){Qe=fe;break}Qe===void 0?Ye(Ae,y,S,!0):(Xt[Qe-te]=w+1,Qe>=mo?mo=Qe:At=!0,H(Ae,u[Qe],m,null,y,S,L,P,T),ye++)}const vo=At?lc(Xt):Nt;for(fe=vo.length-1,w=ze-1;w>=0;w--){const Ae=te+w,Qe=u[Ae],go=Ae+1{const{el:S,type:L,transition:P,children:T,shapeFlag:w}=a;if(w&6){gt(a.component.subTree,u,m,x);return}if(w&128){a.suspense.move(u,m,x);return}if(w&64){L.move(a,u,m,Mt);return}if(L===G){s(S,u,m);for(let B=0;BP.enter(S),y);else{const{leave:B,delayLeave:z,afterLeave:q}=P,te=()=>s(S,u,m),me=()=>{B(S,()=>{te(),q&&q()})};z?z(S,te,me):me()}else s(S,u,m)},Ye=(a,u,m,x=!1,y=!1)=>{const{type:S,props:L,ref:P,children:T,dynamicChildren:w,shapeFlag:D,patchFlag:B,dirs:z}=a;if(P!=null&&Nn(P,null,m,a,!0),D&256){u.ctx.deactivate(a);return}const q=D&1&&z,te=!Rt(a);let me;if(te&&(me=L&&L.onVnodeBeforeUnmount)&&Fe(me,u,a),D&6)Cr(a.component,m,x);else{if(D&128){a.suspense.unmount(m,x);return}q&&Xe(a,null,u,"beforeUnmount"),D&64?a.type.remove(a,u,m,y,Mt,x):w&&(S!==G||B>0&&B&64)?nt(w,u,m,!1,!0):(S===G&&B&384||!y&&D&16)&&nt(T,u,m),x&&_o(a)}(te&&(me=L&&L.onVnodeUnmounted)||q)&&Le(()=>{me&&Fe(me,u,a),q&&Xe(a,null,u,"unmounted")},m)},_o=a=>{const{type:u,el:m,anchor:x,transition:y}=a;if(u===G){Sr(m,x);return}if(u===Dt){W(a);return}const S=()=>{o(m),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(a.shapeFlag&1&&y&&!y.persisted){const{leave:L,delayLeave:P}=y,T=()=>L(m,S);P?P(a.el,S,T):T()}else S()},Sr=(a,u)=>{let m;for(;a!==u;)m=g(a),o(a),a=m;o(u)},Cr=(a,u,m)=>{const{bum:x,scope:y,update:S,subTree:L,um:P}=a;x&&as(x),y.stop(),S&&(S.active=!1,Ye(L,a,u,m)),P&&Le(P,u),Le(()=>{a.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},nt=(a,u,m,x=!1,y=!1,S=0)=>{for(let L=S;La.shapeFlag&6?gn(a.component.subTree):a.shapeFlag&128?a.suspense.next():g(a.anchor||a.el),po=(a,u,m)=>{a==null?u._vnode&&Ye(u._vnode,null,null,!0):H(u._vnode||null,a,u,null,null,null,m),Co(),Mn(),u._vnode=a},Mt={p:H,um:Ye,m:gt,r:_o,mt:R,mc:M,pc:pe,pbc:Y,n:gn,o:e};let rs,ls;return t&&([rs,ls]=t(Mt)),{render:po,hydrate:rs,createApp:sc(po,rs)}}function bt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function nr(e,t,n=!1){const s=e.children,o=t.children;if(K(s)&&K(o))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}const cc=e=>e.__isTeleport,G=Symbol(void 0),Kt=Symbol(void 0),Oe=Symbol(void 0),Dt=Symbol(void 0),on=[];let Ke=null;function d(e=!1){on.push(Ke=e?null:[])}function ac(){on.pop(),Ke=on[on.length-1]||null}let dn=1;function Bo(e){dn+=e}function sr(e){return e.dynamicChildren=dn>0?Ke||Nt:null,ac(),dn>0&&Ke&&Ke.push(e),e}function v(e,t,n,s,o,i){return sr(b(e,t,n,s,o,i,!0))}function J(e,t,n,s,o){return sr(V(e,t,n,s,o,!0))}function On(e){return e?e.__v_isVNode===!0:!1}function $t(e,t){return e.type===t.type&&e.key===t.key}const es="__vInternal",or=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>e!=null?xe(e)||Pe(e)||Q(e)?{i:Se,r:e,k:t,f:!!n}:e:null;function b(e,t=null,n=null,s=0,o=null,i=e===G?0:1,r=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&or(t),ref:t&&Tn(t),scopeId:Yn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Se};return l?(oo(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=xe(n)?8:16),dn>0&&!r&&Ke&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ke.push(c),c}const V=uc;function uc(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===qi)&&(e=Oe),On(e)){const l=_t(e,t,!0);return n&&oo(l,n),dn>0&&!i&&Ke&&(l.shapeFlag&6?Ke[Ke.indexOf(e)]=l:Ke.push(l)),l.patchFlag|=-2,l}if(yc(e)&&(e=e.__vccOpts),t){t=fc(t);let{class:l,style:c}=t;l&&!xe(l)&&(t.class=de(l)),ve(c)&&(Ti(c)&&!K(c)&&(c=we({},c)),t.style=zn(c))}const r=xe(e)?1:Ml(e)?128:cc(e)?64:ve(e)?4:Q(e)?2:0;return b(e,t,n,s,o,r,i,!0)}function fc(e){return e?Ti(e)||es in e?we({},e):e:null}function _t(e,t,n=!1){const{props:s,ref:o,patchFlag:i,children:r}=e,l=t?Vn(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&or(l),ref:t&&t.ref?n&&o?K(o)?o.concat(Tn(t)):[o,Tn(t)]:Tn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==G?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_t(e.ssContent),ssFallback:e.ssFallback&&_t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function Ee(e=" ",t=0){return V(Kt,null,e,t)}function dc(e,t){const n=V(Dt,null,e);return n.staticCount=t,n}function U(e="",t=!1){return t?(d(),J(Oe,null,e)):V(Oe,null,e)}function Ue(e){return e==null||typeof e=="boolean"?V(Oe):K(e)?V(G,null,e.slice()):typeof e=="object"?ut(e):V(Kt,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_t(e)}function oo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(es in t)?t._ctx=Se:o===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Q(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),s&64?(n=16,t=[Ee(t)]):n=8);e.children=t,e.shapeFlag|=n}function Vn(...e){const t={};for(let n=0;nke||Se,qt=e=>{ke=e,e.scope.on()},Tt=()=>{ke&&ke.scope.off(),ke=null};function ir(e){return e.vnode.shapeFlag&4}let hn=!1;function mc(e,t=!1){hn=t;const{props:n,children:s}=e.vnode,o=ir(e);Ql(e,n,o,t),ec(e,s);const i=o?vc(e,t):void 0;return hn=!1,i}function vc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=nn(new Proxy(e.ctx,Kl));const{setup:s}=n;if(s){const o=e.setupContext=s.length>1?lr(e):null;qt(e),Gt();const i=dt(s,e,0,[e.props,o]);if(Yt(),Tt(),pi(i)){if(i.then(Tt,Tt),t)return i.then(r=>{Ho(e,r,t)}).catch(r=>{Wn(r,e,0)});e.asyncDep=i}else Ho(e,i,t)}else rr(e,t)}function Ho(e,t,n){Q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ve(t)&&(e.setupState=Mi(t)),rr(e,n)}let Fo;function rr(e,t,n){const s=e.type;if(!e.render){if(!t&&Fo&&!s.render){const o=s.template||no(e).template;if(o){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=we(we({isCustomElement:i,delimiters:l},r),c);s.render=Fo(o,f)}}e.render=s.render||qe}qt(e),Gt(),ql(e),Yt(),Tt()}function gc(e){return new Proxy(e.attrs,{get(t,n){return Be(e,"get","$attrs"),t[n]}})}function lr(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=gc(e))},slots:e.slots,emit:e.emit,expose:t}}function io(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Mi(nn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sn)return sn[n](e)},has(t,n){return n in t||n in sn}}))}function bc(e,t=!0){return Q(e)?e.displayName||e.name:e.name||t&&e.__name}function yc(e){return Q(e)&&"__vccOpts"in e}const ne=(e,t)=>xl(e,t,hn);function xc(){return kc().slots}function kc(){const e=ts();return e.setupContext||(e.setupContext=lr(e))}function Bn(e,t,n){const s=arguments.length;return s===2?ve(t)&&!K(t)?On(t)?V(e,null,[t]):V(e,t):V(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&On(n)&&(n=[n]),V(e,t,n))}const wc=Symbol(""),$c=()=>Ne(wc),Pc="3.2.45",Sc="http://www.w3.org/2000/svg",Pt=typeof document<"u"?document:null,Ro=Pt&&Pt.createElement("template"),Cc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t?Pt.createElementNS(Sc,e):Pt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Pt.createTextNode(e),createComment:e=>Pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const r=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{Ro.innerHTML=s?`${e}`:e;const l=Ro.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Tc(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Vc(e,t,n){const s=e.style,o=xe(n);if(n&&!o){for(const i in n)Es(s,i,n[i]);if(t&&!xe(t))for(const i in t)n[i]==null&&Es(s,i,"")}else{const i=s.display;o?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const Do=/\s*!important$/;function Es(e,t,n){if(K(n))n.forEach(s=>Es(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ec(e,t);Do.test(n)?e.setProperty(Wt(s),n.replace(Do,""),"important"):e[s]=n}}const zo=["Webkit","Moz","ms"],hs={};function Ec(e,t){const n=hs[t];if(n)return n;let s=tt(t);if(s!=="filter"&&s in e)return hs[t]=s;s=Kn(s);for(let o=0;o_s||(Bc.then(()=>_s=0),_s=Date.now());function Fc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Rc(s,n.value),t,5,[s])};return n.value=e,n.attached=Hc(),n}function Rc(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const Ko=/^on[a-z]/,Dc=(e,t,n,s,o=!1,i,r,l,c)=>{t==="class"?Tc(e,s,o):t==="style"?Vc(e,n,s):pn(t)?Bs(t)||Nc(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):zc(e,t,s,o))?Mc(e,t,s,i,r,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Lc(e,t,s,o))};function zc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Ko.test(t)&&Q(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ko.test(t)&&xe(n)?!1:t in e}function Uc(e){const t=ts();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Ms(i,o))},s=()=>{const o=e(t.proxy);Ls(t.subTree,o),n(o)};Fi(s),De(()=>{const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),pt(()=>o.disconnect())})}function Ls(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Ls(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Ms(e.el,t);else if(e.type===G)e.children.forEach(n=>Ls(n,t));else if(e.type===Dt){let{el:n,anchor:s}=e;for(;n&&(Ms(n,t),n!==s);)n=n.nextSibling}}function Ms(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const ct="transition",Zt="animation",ns=(e,{slots:t})=>Bn(Di,jc(e),t);ns.displayName="Transition";const cr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ns.props=we({},Di.props,cr);const yt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},qo=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function jc(e){const t={};for(const O in e)O in cr||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=r,appearToClass:h=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:$=`${n}-leave-to`}=e,j=Kc(o),H=j&&j[0],se=j&&j[1],{onBeforeEnter:k,onEnter:E,onEnterCancelled:I,onLeave:W,onLeaveCancelled:Z,onBeforeAppear:he=k,onAppear:oe=E,onAppearCancelled:M=I}=t,X=(O,ee,R)=>{xt(O,ee?h:l),xt(O,ee?f:r),R&&R()},Y=(O,ee)=>{O._isLeaving=!1,xt(O,p),xt(O,$),xt(O,g),ee&&ee()},re=O=>(ee,R)=>{const Me=O?oe:E,ue=()=>X(ee,O,R);yt(Me,[ee,ue]),Jo(()=>{xt(ee,O?c:i),at(ee,O?h:l),qo(Me)||Wo(ee,s,H,ue)})};return we(t,{onBeforeEnter(O){yt(k,[O]),at(O,i),at(O,r)},onBeforeAppear(O){yt(he,[O]),at(O,c),at(O,f)},onEnter:re(!1),onAppear:re(!0),onLeave(O,ee){O._isLeaving=!0;const R=()=>Y(O,ee);at(O,p),Wc(),at(O,g),Jo(()=>{O._isLeaving&&(xt(O,p),at(O,$),qo(W)||Wo(O,s,se,R))}),yt(W,[O,R])},onEnterCancelled(O){X(O,!1),yt(I,[O])},onAppearCancelled(O){X(O,!0),yt(M,[O])},onLeaveCancelled(O){Y(O),yt(Z,[O])}})}function Kc(e){if(e==null)return null;if(ve(e))return[ps(e.enter),ps(e.leave)];{const t=ps(e);return[t,t]}}function ps(e){return Ds(e)}function at(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function xt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Jo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let qc=0;function Wo(e,t,n,s){const o=e._endId=++qc,i=()=>{o===e._endId&&s()};if(n)return setTimeout(i,n);const{type:r,timeout:l,propCount:c}=Jc(e,t);if(!r)return s();const f=r+"end";let h=0;const p=()=>{e.removeEventListener(f,g),i()},g=$=>{$.target===e&&++h>=c&&p()};setTimeout(()=>{h(n[j]||"").split(", "),o=s(`${ct}Delay`),i=s(`${ct}Duration`),r=Go(o,i),l=s(`${Zt}Delay`),c=s(`${Zt}Duration`),f=Go(l,c);let h=null,p=0,g=0;t===ct?r>0&&(h=ct,p=r,g=i.length):t===Zt?f>0&&(h=Zt,p=f,g=c.length):(p=Math.max(r,f),h=p>0?r>f?ct:Zt:null,g=h?h===ct?i.length:c.length:0);const $=h===ct&&/\b(transform|all)(,|$)/.test(s(`${ct}Property`).toString());return{type:h,timeout:p,propCount:g,hasTransform:$}}function Go(e,t){for(;e.lengthYo(n)+Yo(e[s])))}function Yo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Wc(){return document.body.offsetHeight}const Gc=["ctrl","shift","alt","meta"],Yc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Gc.some(n=>e[`${n}Key`]&&!t.includes(n))},Qc=(e,t)=>(n,...s)=>{for(let o=0;o{const t=Zc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=ta(s);if(o)return n(o,!0,o instanceof SVGElement)},t};function ta(e){return xe(e)?document.querySelector(e):e}const N=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},na="modulepreload",sa=function(e){return"/HuaiGu/"+e},Xo={},oa=function(t,n,s){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=sa(i),i in Xo)return;Xo[i]=!0;const r=i.endsWith(".css"),l=r?'[rel="stylesheet"]':"";if(!!s)for(let h=o.length-1;h>=0;h--){const p=o[h];if(p.href===i&&(!r||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const f=document.createElement("link");if(f.rel=r?"stylesheet":na,r||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),r)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};const ia=F({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(d(),v("span",{class:de(["VPBadge",e.type??"tip"])},[C(t.$slots,"default",{},()=>[Ee(ae(e.text),1)],!0)],2))}});const ra=N(ia,[["__scopeId","data-v-350d3852"]]),la=JSON.parse('{"lang":"en-US","title":"怀谷","description":"vue react leetcode angular","base":"/HuaiGu/","head":[],"appearance":true,"themeConfig":{"siteTitle":"怀谷","nav":[{"text":"Vue","link":"/Vue/组件通信/Api-attrs"},{"text":"开发总结","link":"/开发总结/Adobe-pr插件"},{"text":"计算机基础","link":"/计算机基础/"},{"text":"算法","link":"/算法/二叉树/层序遍历"}],"lastUpdated":"最近更新时间","socialLinks":[{"icon":"github","link":"https://github.com/Huai-Gu/HuaiGu"}],"sidebar":[{"collapsible":true,"text":"JS.TS","items":[{"collapsible":true,"text":"ES6","items":[{"text":"Iterator","link":"/JS.TS/ES6/Iterator.md"},{"text":"Symbol","link":"/JS.TS/ES6/Symbol.md"},{"text":"index","link":"/JS.TS/ES6/index.md"},{"text":"promise","link":"/JS.TS/ES6/promise.md"},{"text":"解构赋值","link":"/JS.TS/ES6/解构赋值.md"},{"text":"运算符","link":"/JS.TS/ES6/运算符.md"}]},{"text":"JS上下文和执行栈","link":"/JS.TS/JS上下文和执行栈.md"},{"collapsible":true,"text":"TS","items":[{"text":"is","link":"/JS.TS/TS/is.md"},{"text":"索引","link":"/JS.TS/TS/索引.md"}]},{"collapsible":true,"text":"基础","items":[{"text":"Eventloop","link":"/JS.TS/基础/Eventloop.md"},{"text":"Js中的map和weakMap","link":"/JS.TS/基础/Js中的map和weakMap.md"},{"text":"new操作符","link":"/JS.TS/基础/new操作符.md"},{"text":"一文搞懂map函数","link":"/JS.TS/基础/一文搞懂map函数.md"},{"text":"垃圾回收","link":"/JS.TS/基础/垃圾回收.md"}]},{"collapsible":true,"text":"设计模式","items":[{"text":"发布订阅模式","link":"/JS.TS/设计模式/发布订阅模式.md"}]}]},{"collapsible":true,"text":"React","items":[{"collapsible":true,"text":"ReactHooks","items":[{"text":"useCallback","link":"/React/ReactHooks/useCallback.md"},{"text":"useContext","link":"/React/ReactHooks/useContext.md"},{"text":"useEffect","link":"/React/ReactHooks/useEffect.md"},{"text":"useRef","link":"/React/ReactHooks/useRef.md"},{"text":"useState","link":"/React/ReactHooks/useState.md"}]},{"text":"index","link":"/React/index.md"},{"text":"redux","link":"/React/redux.md"}]},{"collapsible":true,"text":"Vue","items":[{"collapsible":true,"text":"CSS","items":[{"text":"scroll","link":"/Vue/CSS/scroll.md"}]},{"collapsible":true,"text":"源码分析","items":[{"text":"VNode与diff算法","link":"/Vue/源码分析/VNode与diff算法.md"}]},{"collapsible":true,"text":"组件通信","items":[{"text":"Api-attrs","link":"/Vue/组件通信/Api-attrs.md"},{"text":"Api-parent","link":"/Vue/组件通信/Api-parent.md"},{"text":"Api-props","link":"/Vue/组件通信/Api-props.md"},{"text":"Api-provide","link":"/Vue/组件通信/Api-provide.md"}]}]},{"collapsible":true,"text":"tips","items":[{"text":"2023.3.5","link":"/tips/2023.3.5.md"}]},{"collapsible":true,"text":"开发总结","items":[{"text":"Adobe-pr插件","link":"/开发总结/Adobe-pr插件.md"},{"collapsible":true,"text":"canvas","items":[{"text":"canvas","link":"/开发总结/canvas/canvas.md"}]},{"text":"github-deploy","link":"/开发总结/github-deploy.md"},{"text":"v-for和v-if","link":"/开发总结/v-for和v-if.md"},{"collapsible":true,"text":"常用的库","items":[{"text":"css","link":"/开发总结/常用的库/css.md"}]}]},{"collapsible":true,"text":"算法","items":[{"collapsible":true,"text":"二叉树","items":[{"text":"层序遍历","link":"/算法/二叉树/层序遍历.md"}]},{"collapsible":true,"text":"面试算法题","items":[{"text":"1.15七牛云春招笔试题","link":"/算法/面试算法题/1.15七牛云春招笔试题.md"},{"text":"1.7字节","link":"/算法/面试算法题/1.7字节.md"}]}]},{"collapsible":true,"text":"计算机基础","items":[{"text":"HTTP","link":"/计算机基础/HTTP.md"},{"collapsible":true,"text":"git","items":[{"text":"git规范","link":"/计算机基础/git/git规范.md"},{"text":"git设置两个ssh密钥","link":"/计算机基础/git/git设置两个ssh密钥.md"},{"text":"index","link":"/计算机基础/git/index.md"},{"text":"tips","link":"/计算机基础/git/tips.md"},{"collapsible":true,"text":"命令","items":[{"text":"init","link":"/计算机基础/git/命令/init.md"},{"text":"merge","link":"/计算机基础/git/命令/merge.md"},{"text":"常用","link":"/计算机基础/git/命令/常用.md"}]},{"collapsible":true,"text":"场景及解决方案","items":[{"text":"发版","link":"/计算机基础/git/场景及解决方案/发版.md"},{"text":"开发新功能","link":"/计算机基础/git/场景及解决方案/开发新功能.md"},{"text":"紧急bug","link":"/计算机基础/git/场景及解决方案/紧急bug.md"}]}]},{"text":"index","link":"/计算机基础/index.md"}]},{"collapsible":true,"text":"面试","items":[{"collapsible":true,"text":"CZ前端","items":[{"text":"HTML+CSS","link":"/面试/CZ前端/HTML+CSS.md"},{"collapsible":true,"text":"JS基础","items":[{"text":"作用域和闭包","link":"/面试/CZ前端/JS基础/作用域和闭包.md"},{"text":"原型和原型链","link":"/面试/CZ前端/JS基础/原型和原型链.md"},{"text":"变量类型和计算","link":"/面试/CZ前端/JS基础/变量类型和计算.md"},{"text":"异步","link":"/面试/CZ前端/JS基础/异步.md"}]}]},{"collapsible":true,"text":"NONI","items":[{"collapsible":true,"text":"JS","items":[{"collapsible":true,"text":"JS基础","items":[{"text":"DOM和BOM","link":"/面试/NONI/JS/JS基础/DOM和BOM.md"},{"text":"new操作符实现原理","link":"/面试/NONI/JS/JS基础/new操作符实现原理.md"},{"text":"手写call","link":"/面试/NONI/JS/JS基础/手写call.md"},{"text":"数组原生方法","link":"/面试/NONI/JS/JS基础/数组原生方法.md"}]}]},{"collapsible":true,"text":"Vue","items":[{"text":"v-if和v-for同时使用问题","link":"/面试/NONI/Vue/v-if和v-for同时使用问题.md"}]}]},{"collapsible":true,"text":"前端","items":[{"collapsible":true,"text":"HTTP","items":[{"text":"HTTP的优先级","link":"/面试/前端/HTTP/HTTP的优先级.md"}]},{"text":"flexandgrid","link":"/面试/前端/flexandgrid.md"},{"collapsible":true,"text":"url到页面","items":[{"text":"总章","link":"/面试/前端/url到页面/总章.md"}]},{"collapsible":true,"text":"事件","items":[{"text":"事件循环","link":"/面试/前端/事件/事件循环.md"},{"text":"事件机制","link":"/面试/前端/事件/事件机制.md"}]},{"text":"客户端存储","link":"/面试/前端/客户端存储.md"},{"text":"跨域","link":"/面试/前端/跨域.md"}]}]}],"base":"/fantastic-admin/"},"locales":{},"langs":{},"scrollOffset":90,"cleanUrls":"disabled"}'),ss=/^[a-z]+:/i,ca=/^pathname:\/\//,Zo="vitepress-theme-appearance",Ve=typeof window<"u",ar={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function aa(e,t){t.sort((n,s)=>{const o=s.split("/").length-n.split("/").length;return o!==0?o:s.length-n.length});for(const n of t)if(e.startsWith(n))return n}function ei(e,t){const n=aa(t,Object.keys(e));return n?e[n]:void 0}function ua(e){const{locales:t}=e.themeConfig||{},n=e.locales;return t&&n?Object.keys(t).reduce((s,o)=>(s[o]={label:t[o].label,lang:n[o].lang},s),{}):{}}function fa(e,t){t=ha(e,t);const n=ei(e.locales||{},t),s=ei(e.themeConfig.locales||{},t);return Object.assign({},e,n,{themeConfig:Object.assign({},e.themeConfig,s,{locales:{}}),lang:(n||e).lang,locales:{},langs:ua(e)})}function ur(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=da(e.title,s);return`${n}${o}`}function da(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ha(e,t){if(!Ve)return t;const n=e.base,s=n.endsWith("/")?n.slice(0,-1):n;return t.slice(s.length)}function _a(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([i,r])=>i===n&&r[o[0]]===o[1])}function pa(e,t){return[...e.filter(n=>!_a(t,n)),...t]}const ma=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,va=/^[a-z]:/i;function ti(e){const t=va.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ma,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}function ga(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _n(e){return ss.test(e)?e:ga(Jt.value.base,e)}function fr(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ve){const n="/HuaiGu/";t=ti(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];!s&&t.endsWith("_index.md")&&(t=t.slice(0,-9)+".md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${ti(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}const dr=Symbol(),Jt=vl(la);function ba(e){const t=ne(()=>fa(Jt.value,e.path));return{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),lang:ne(()=>t.value.lang),localePath:ne(()=>{const{langs:n,lang:s}=t.value,o=Object.keys(n).find(i=>n[i].lang===s);return _n(o||"/")}),title:ne(()=>ur(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:_e(!1)}}function le(){const e=Ne(dr);if(!e)throw new Error("vitepress data not properly injected in app");return e}const hr=Symbol(),ni="http://a.com",ya=()=>({path:"/",component:null,data:ar});function xa(e,t){const n=Jn(ya()),s={route:n,go:o};async function o(l=Ve?location.href:"/"){var f,h;await((f=s.onBeforeRouteChange)==null?void 0:f.call(s,l));const c=new URL(l,ni);Jt.value.cleanUrls==="disabled"&&!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",l=c.pathname+c.search+c.hash),Ve&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await r(l),await((h=s.onAfterRouteChanged)==null?void 0:h.call(s,l))}let i=null;async function r(l,c=0,f=!1){const h=new URL(l,ni),p=i=h.pathname;try{let g=await e(p);if(i===p){i=null;const{default:$,__pageData:j}=g;if(!$)throw new Error(`Invalid route component: ${$}`);n.path=Ve?p:_n(p),n.component=nn($),n.data=nn(j),Ve&&Qs(()=>{if(h.hash&&!c){let H=null;try{H=document.querySelector(decodeURIComponent(h.hash))}catch(se){console.warn(se)}if(H){si(H,h.hash);return}}window.scrollTo(0,c)})}}catch(g){if(!/fetch/.test(g.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(g),!f)try{const $=await fetch(Jt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await $.json(),await r(l,c,!0);return}catch{}i===p&&(i=null,n.path=Ve?p:_n(p),n.component=t?nn(t):null,n.data=ar)}}return Ve&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const f=l.target.closest("a");if(f&&!f.closest(".vp-raw")&&!f.download){const{href:h,origin:p,pathname:g,hash:$,search:j,target:H}=f,se=window.location,k=g.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&H!=="_blank"&&p===se.origin&&!(k&&k[0]!==".html")&&(l.preventDefault(),g===se.pathname&&j===se.search?$&&$!==se.hash&&(history.pushState(null,"",$),window.dispatchEvent(new Event("hashchange")),si(f,$,f.classList.contains("header-anchor"))):o(h))}},{capture:!0}),window.addEventListener("popstate",l=>{r(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function ka(){const e=Ne(hr);if(!e)throw new Error("useRouter() is called without provider.");return e}function mt(){return ka().route}function si(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=Jt.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const i=parseInt(window.getComputedStyle(s).paddingTop,10),r=window.scrollY+s.getBoundingClientRect().top-o+i;!n||Math.abs(r-window.scrollY)>window.innerHeight?window.scrollTo(0,r):window.scrollTo({left:0,top:r,behavior:"smooth"})}}const wa=F({name:"VitePressContent",props:{onContentUpdated:Function},setup(e){const t=mt();return Zs(()=>{var n;(n=e.onContentUpdated)==null||n.call(e)}),()=>Bn("div",{style:{position:"relative"}},[t.component?Bn(t.component):null])}});var oi;const mn=typeof window<"u";mn&&((oi=window==null?void 0:window.navigator)!=null&&oi.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function $a(e){return e}function Pa(e){return Ur()?(jr(e),!0):!1}function Sa(e){return typeof e=="function"?ne(e):_e(e)}function Ca(e,t=!0){ts()?De(e):t?e():Qs(e)}const Ta=mn?window:void 0;mn&&window.document;mn&&window.navigator;mn&&window.location;function Va(e,t=!1){const n=_e(),s=()=>n.value=Boolean(e());return s(),Ca(s,t),n}function As(e,t={}){const{window:n=Ta}=t,s=Va(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=_e(!1),r=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},l=()=>{s.value&&(r(),o=n.matchMedia(Sa(e).value),i.value=o.matches,"addEventListener"in o?o.addEventListener("change",l):o.addListener(l))};return Vt(l),Pa(()=>r()),i}const Is=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Ns="__vueuse_ssr_handlers__";Is[Ns]=Is[Ns]||{};Is[Ns];var ii;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ii||(ii={}));var Ea=Object.defineProperty,ri=Object.getOwnPropertySymbols,La=Object.prototype.hasOwnProperty,Ma=Object.prototype.propertyIsEnumerable,li=(e,t,n)=>t in e?Ea(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Aa=(e,t)=>{for(var n in t||(t={}))La.call(t,n)&&li(e,n,t[n]);if(ri)for(var n of ri(t))Ma.call(t,n)&&li(e,n,t[n]);return e};const Ia={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};Aa({linear:$a},Ia);const _r=/#.*$/,Na=/(index)?\.(md|html)$/,Oa=typeof window<"u",Ba=_e(Oa?location.hash:"");function Ha(e){return ss.test(e)}function Fa(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function Qt(e,t,n=!1){if(t===void 0)return!1;if(e=ai(`/${e}`),n)return new RegExp(t).test(e);if(ai(t)!==e)return!1;const s=t.match(_r);return s?Ba.value===s[0]:!0}function ci(e){return/^\//.test(e)?e:`/${e}`}function ai(e){return decodeURI(e).replace(_r,"").replace(Na,"")}function Hn(e){if(Ha(e))return e.replace(ca,"");const{site:t}=le(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),i=n.endsWith("/")||n.endsWith(".html")?e:`${n.replace(/(\.md)?$/,t.value.cleanUrls==="disabled"?".html":"")}${s}${o}`;return _n(i)}function pr(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=ci(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(ci(s)));return n?e[n]:[]}function Ra(e){const t=[];function n(s){for(const o of s)o.link&&t.push({...o,link:o.link}),"items"in o&&n(o.items)}for(const s of e)n(s.items);return t}function Ge(){const e=mt(),{theme:t,frontmatter:n}=le(),s=As("(min-width: 960px)"),o=_e(!1),i=ne(()=>{const g=t.value.sidebar,$=e.data.relativePath;return g?pr(g,$):[]}),r=ne(()=>n.value.sidebar!==!1&&i.value.length>0&&n.value.layout!=="home"),l=ne(()=>n.value.layout!=="home"&&n.value.aside!==!1),c=ne(()=>r.value&&s.value);function f(){o.value=!0}function h(){o.value=!1}function p(){o.value?h():f()}return{isOpen:o,sidebar:i,hasSidebar:r,hasAside:l,isSidebarEnabled:c,open:f,close:h,toggle:p}}function Da(e,t){let n;Vt(()=>{n=e.value?document.activeElement:void 0}),De(()=>{window.addEventListener("keyup",s)}),pt(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}const za=F({__name:"VPSkipLink",setup(e){const t=mt(),n=_e();et(()=>t.path,()=>n.value.focus());function s({target:o}){const i=document.querySelector(o.hash);if(i){const r=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",r)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",r),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(d(),v(G,null,[b("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),b("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Ua=N(za,[["__scopeId","data-v-151f2593"]]),ja={key:0,class:"VPBackdrop"},Ka=F({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(d(),J(ns,{name:"fade"},{default:A(()=>[e.show?(d(),v("div",ja)):U("",!0)]),_:1}))}});const qa=N(Ka,[["__scopeId","data-v-c7c65b34"]]);function Ja(){const e=_e(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=mt();return et(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const Wa=["src","alt"],Ga={inheritAttrs:!1},Ya=F({...Ga,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=Et("VPImage",!0);return e.image?(d(),v(G,{key:0},[typeof e.image=="string"||"src"in e.image?(d(),v("img",Vn({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:_(_n)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Wa)):(d(),v(G,{key:1},[V(s,Vn({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),V(s,Vn({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):U("",!0)}}});const ro=N(Ya,[["__scopeId","data-v-6db2186b"]]),Qa=["href"],Xa=F({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=le(),{hasSidebar:s}=Ge();return(o,i)=>(d(),v("div",{class:de(["VPNavBarTitle",{"has-sidebar":_(s)}])},[b("a",{class:"title",href:_(t).base},[C(o.$slots,"nav-bar-title-before",{},void 0,!0),V(ro,{class:"logo",image:_(n).logo},null,8,["image"]),_(n).siteTitle?(d(),v(G,{key:0},[Ee(ae(_(n).siteTitle),1)],64)):_(n).siteTitle===void 0?(d(),v(G,{key:1},[Ee(ae(_(t).title),1)],64)):U("",!0),C(o.$slots,"nav-bar-title-after",{},void 0,!0)],8,Qa)],2))}});const Za=N(Xa,[["__scopeId","data-v-d5925166"]]);const eu={key:0,class:"VPNavBarSearch"},tu={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},nu={class:"DocSearch-Button-Container"},su=b("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[b("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),ou={class:"DocSearch-Button-Placeholder"},iu=b("span",{class:"DocSearch-Button-Keys"},[b("kbd",{class:"DocSearch-Button-Key"}),b("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ru=F({__name:"VPNavBarSearch",setup(e){Uc(r=>({"5943dbe8":o.value}));const t=()=>null,{theme:n}=le(),s=_e(!1),o=_e("'Meta'");De(()=>{if(!n.value.algolia)return;o.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const r=c=>{c.key==="k"&&(c.ctrlKey||c.metaKey)&&(c.preventDefault(),i(),l())},l=()=>{window.removeEventListener("keydown",r)};window.addEventListener("keydown",r),pt(l)});function i(){s.value||(s.value=!0)}return(r,l)=>{var c;return _(n).algolia?(d(),v("div",eu,[s.value?(d(),J(_(t),{key:0})):(d(),v("div",{key:1,id:"docsearch",onClick:i},[b("button",tu,[b("span",nu,[su,b("span",ou,ae(((c=_(n).algolia)==null?void 0:c.buttonText)||"Search"),1)]),iu])]))])):U("",!0)}}});const lu={},cu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},au=b("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),uu=b("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),fu=[au,uu];function du(e,t){return d(),v("svg",cu,fu)}const hu=N(lu,[["render",du]]),_u=F({__name:"VPLink",props:{href:null,noIcon:{type:Boolean}},setup(e){const t=e,n=ne(()=>t.href&&ss.test(t.href));return(s,o)=>(d(),J(to(e.href?"a":"span"),{class:de(["VPLink",{link:e.href}]),href:e.href?_(Hn)(e.href):void 0,target:_(n)?"_blank":void 0,rel:_(n)?"noreferrer":void 0},{default:A(()=>[C(s.$slots,"default",{},void 0,!0),_(n)&&!e.noIcon?(d(),J(hu,{key:0,class:"icon"})):U("",!0)]),_:3},8,["class","href","target","rel"]))}});const Lt=N(_u,[["__scopeId","data-v-3c355974"]]),pu=F({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),J(Lt,{class:de({VPNavBarMenuLink:!0,active:_(Qt)(_(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,noIcon:!0},{default:A(()=>[Ee(ae(e.item.text),1)]),_:1},8,["class","href"]))}});const mu=N(pu,[["__scopeId","data-v-47a2263e"]]),lo=_e();let mr=!1,vs=0;function vu(e){const t=_e(!1);if(typeof window<"u"){!mr&&gu(),vs++;const n=et(lo,s=>{var o,i,r;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(i=e.onFocus)==null||i.call(e)):(t.value=!1,(r=e.onBlur)==null||r.call(e))});pt(()=>{n(),vs--,vs||bu()})}return Js(t)}function gu(){document.addEventListener("focusin",vr),mr=!0,lo.value=document.activeElement}function bu(){document.removeEventListener("focusin",vr)}function vr(){lo.value=document.activeElement}const yu={},xu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ku=b("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),wu=[ku];function $u(e,t){return d(),v("svg",xu,wu)}const gr=N(yu,[["render",$u]]),Pu={},Su={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Cu=b("circle",{cx:"12",cy:"12",r:"2"},null,-1),Tu=b("circle",{cx:"19",cy:"12",r:"2"},null,-1),Vu=b("circle",{cx:"5",cy:"12",r:"2"},null,-1),Eu=[Cu,Tu,Vu];function Lu(e,t){return d(),v("svg",Su,Eu)}const Mu=N(Pu,[["render",Lu]]),Au={class:"VPMenuLink"},Iu=F({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),v("div",Au,[V(Lt,{class:de({active:_(Qt)(_(t).relativePath,e.item.activeMatch||e.item.link)}),href:e.item.link},{default:A(()=>[Ee(ae(e.item.text),1)]),_:1},8,["class","href"])]))}});const os=N(Iu,[["__scopeId","data-v-e8e0fb1d"]]),Nu={class:"VPMenuGroup"},Ou={key:0,class:"title"},Bu=F({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(d(),v("div",Nu,[e.text?(d(),v("p",Ou,ae(e.text),1)):U("",!0),(d(!0),v(G,null,Ce(e.items,s=>(d(),v(G,null,["link"in s?(d(),J(os,{key:0,item:s},null,8,["item"])):U("",!0)],64))),256))]))}});const Hu=N(Bu,[["__scopeId","data-v-9ca52130"]]),Fu={class:"VPMenu"},Ru={key:0,class:"items"},Du=F({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(d(),v("div",Fu,[e.items?(d(),v("div",Ru,[(d(!0),v(G,null,Ce(e.items,s=>(d(),v(G,{key:s.text},["link"in s?(d(),J(os,{key:0,item:s},null,8,["item"])):(d(),J(Hu,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):U("",!0),C(t.$slots,"default",{},void 0,!0)]))}});const zu=N(Du,[["__scopeId","data-v-1c5d0cfc"]]),Uu=["aria-expanded","aria-label"],ju={key:0,class:"text"},Ku={class:"menu"},qu=F({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=_e(!1),n=_e();vu({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(d(),v("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=r=>t.value=!0),onMouseleave:i[2]||(i[2]=r=>t.value=!1)},[b("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=r=>t.value=!t.value)},[e.button||e.icon?(d(),v("span",ju,[e.icon?(d(),J(to(e.icon),{key:0,class:"option-icon"})):U("",!0),Ee(" "+ae(e.button)+" ",1),V(gr,{class:"text-icon"})])):(d(),J(Mu,{key:1,class:"icon"}))],8,Uu),b("div",Ku,[V(zu,{items:e.items},{default:A(()=>[C(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const co=N(qu,[["__scopeId","data-v-6ffb57d3"]]),Ju=F({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=le();return(n,s)=>(d(),J(co,{class:de({VPNavBarMenuGroup:!0,active:_(Qt)(_(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Wu=e=>(Je("data-v-f83db6ba"),e=e(),We(),e),Gu={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Yu=Wu(()=>b("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Qu=F({__name:"VPNavBarMenu",setup(e){const{theme:t}=le();return(n,s)=>_(t).nav?(d(),v("nav",Gu,[Yu,(d(!0),v(G,null,Ce(_(t).nav,o=>(d(),v(G,{key:o.text},["link"in o?(d(),J(mu,{key:0,item:o},null,8,["item"])):(d(),J(Ju,{key:1,item:o},null,8,["item"]))],64))),128))])):U("",!0)}});const Xu=N(Qu,[["__scopeId","data-v-f83db6ba"]]),Zu={},ef={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},tf=b("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),nf=b("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),sf=[tf,nf];function of(e,t){return d(),v("svg",ef,sf)}const br=N(Zu,[["render",of]]),rf={class:"items"},lf={class:"title"},cf=F({__name:"VPNavBarTranslations",setup(e){const{theme:t}=le();return(n,s)=>_(t).localeLinks?(d(),J(co,{key:0,class:"VPNavBarTranslations",icon:br},{default:A(()=>[b("div",rf,[b("p",lf,ae(_(t).localeLinks.text),1),(d(!0),v(G,null,Ce(_(t).localeLinks.items,o=>(d(),J(os,{key:o.link,item:o},null,8,["item"]))),128))])]),_:1})):U("",!0)}});const af=N(cf,[["__scopeId","data-v-db824e91"]]);const uf={},ff={class:"VPSwitch",type:"button",role:"switch"},df={class:"check"},hf={key:0,class:"icon"};function _f(e,t){return d(),v("button",ff,[b("span",df,[e.$slots.default?(d(),v("span",hf,[C(e.$slots,"default",{},void 0,!0)])):U("",!0)])])}const pf=N(uf,[["render",_f],["__scopeId","data-v-eba7420e"]]),mf={},vf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},gf=dc('',9),bf=[gf];function yf(e,t){return d(),v("svg",vf,bf)}const xf=N(mf,[["render",yf]]),kf={},wf={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},$f=b("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Pf=[$f];function Sf(e,t){return d(),v("svg",wf,Pf)}const Cf=N(kf,[["render",Sf]]),Tf=F({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=le(),s=_e(!1),o=typeof localStorage<"u"?i():()=>{};De(()=>{s.value=document.documentElement.classList.contains("dark")});function i(){const r=window.matchMedia("(prefers-color-scheme: dark)"),l=document.documentElement.classList;let c=localStorage.getItem(Zo),f=t.value.appearance==="dark"&&c==null||(c==="auto"||c==null?r.matches:c==="dark");r.onchange=g=>{c==="auto"&&p(f=g.matches)};function h(){p(f=!f),c=f?r.matches?"auto":"dark":r.matches?"light":"auto",localStorage.setItem(Zo,c)}function p(g){const $=document.createElement("style");$.type="text/css",$.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) {
       -webkit-transition: none !important;
       -moz-transition: none !important;
       -o-transition: none !important;
    diff --git a/assets/index.md.9a7f58ba.js b/assets/index.md.624b3696.js
    similarity index 92%
    rename from assets/index.md.9a7f58ba.js
    rename to assets/index.md.624b3696.js
    index dac7e57..5040ea7 100644
    --- a/assets/index.md.9a7f58ba.js
    +++ b/assets/index.md.624b3696.js
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"怀谷","text":"敦兮其若朴 旷兮其若谷","image":{"src":"/vue.png","alt":"图片怎么不见了????????????"},"actions":[{"theme":"brand","text":"快速开始","link":"/JS.TS/ES6/Iterator"},{"theme":"alt","text":"View on Github","link":"https://github.com/Huai-Gu/HuaiGu"}]},"features":[{"icon":"🖖","title":"Vue/React/Angular","details":null},{"icon":"🖖","title":"Webpack/gulp/rollup","details":null},{"icon":"🛠️","title":"leetcode/TCP/IP","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"};function i(o,l,r,c,s,u){return a(),t("div")}const m=e(n,[["render",i]]);export{p as __pageData,m as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"怀谷","text":"敦兮其若朴 旷兮其若谷","image":{"src":"/vue.png","alt":"图片怎么不见了????????????"},"actions":[{"theme":"brand","text":"快速开始","link":"/JS.TS/ES6/Iterator"},{"theme":"alt","text":"View on Github","link":"https://github.com/Huai-Gu/HuaiGu"}]},"features":[{"icon":"🖖","title":"Vue/React/Angular","details":null},{"icon":"🖖","title":"Webpack/gulp/rollup","details":null},{"icon":"🛠️","title":"leetcode/TCP/IP","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"};function i(o,l,r,c,s,u){return a(),t("div")}const m=e(n,[["render",i]]);export{p as __pageData,m as default};
    diff --git a/assets/index.md.9a7f58ba.lean.js b/assets/index.md.624b3696.lean.js
    similarity index 92%
    rename from assets/index.md.9a7f58ba.lean.js
    rename to assets/index.md.624b3696.lean.js
    index dac7e57..5040ea7 100644
    --- a/assets/index.md.9a7f58ba.lean.js
    +++ b/assets/index.md.624b3696.lean.js
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"怀谷","text":"敦兮其若朴 旷兮其若谷","image":{"src":"/vue.png","alt":"图片怎么不见了????????????"},"actions":[{"theme":"brand","text":"快速开始","link":"/JS.TS/ES6/Iterator"},{"theme":"alt","text":"View on Github","link":"https://github.com/Huai-Gu/HuaiGu"}]},"features":[{"icon":"🖖","title":"Vue/React/Angular","details":null},{"icon":"🖖","title":"Webpack/gulp/rollup","details":null},{"icon":"🛠️","title":"leetcode/TCP/IP","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"};function i(o,l,r,c,s,u){return a(),t("div")}const m=e(n,[["render",i]]);export{p as __pageData,m as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"怀谷","text":"敦兮其若朴 旷兮其若谷","image":{"src":"/vue.png","alt":"图片怎么不见了????????????"},"actions":[{"theme":"brand","text":"快速开始","link":"/JS.TS/ES6/Iterator"},{"theme":"alt","text":"View on Github","link":"https://github.com/Huai-Gu/HuaiGu"}]},"features":[{"icon":"🖖","title":"Vue/React/Angular","details":null},{"icon":"🖖","title":"Webpack/gulp/rollup","details":null},{"icon":"🛠️","title":"leetcode/TCP/IP","details":null}]},"headers":[],"relativePath":"index.md"}'),n={name:"index.md"};function i(o,l,r,c,s,u){return a(),t("div")}const m=e(n,[["render",i]]);export{p as __pageData,m as default};
    diff --git a/assets/tips_2023.3.5.md.38a1bfd0.js b/assets/tips_2023.3.5.md.2dbdb9f3.js
    similarity index 97%
    rename from assets/tips_2023.3.5.md.38a1bfd0.js
    rename to assets/tips_2023.3.5.md.2dbdb9f3.js
    index f863eef..247bfc7 100644
    --- a/assets/tips_2023.3.5.md.38a1bfd0.js
    +++ b/assets/tips_2023.3.5.md.2dbdb9f3.js
    @@ -1,4 +1,4 @@
    -import{_ as e,c as s,o as a,a as n}from"./app.3e0f3fbc.js";const D=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"reg.source","slug":"reg-source","link":"#reg-source","children":[]},{"level":2,"title":"自动发版 semantic-release","slug":"自动发版-semantic-release","link":"#自动发版-semantic-release","children":[{"level":3,"title":"","slug":"","link":"#","children":[]}]}],"relativePath":"tips/2023.3.5.md"}'),l={name:"tips/2023.3.5.md"},r=n(`

    reg.source

    js
    var regex = /fooBar/ig;
    +import{_ as e,c as s,o as a,a as n}from"./app.ec03d301.js";const D=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"reg.source","slug":"reg-source","link":"#reg-source","children":[]},{"level":2,"title":"自动发版 semantic-release","slug":"自动发版-semantic-release","link":"#自动发版-semantic-release","children":[{"level":3,"title":"","slug":"","link":"#","children":[]}]}],"relativePath":"tips/2023.3.5.md"}'),l={name:"tips/2023.3.5.md"},r=n(`

    reg.source

    js
    var regex = /fooBar/ig;
     
     console.log(regex.source); // "fooBar",不包含 /.../ 和 "ig"。
     
    diff --git a/assets/tips_2023.3.5.md.38a1bfd0.lean.js b/assets/tips_2023.3.5.md.2dbdb9f3.lean.js
    similarity index 89%
    rename from assets/tips_2023.3.5.md.38a1bfd0.lean.js
    rename to assets/tips_2023.3.5.md.2dbdb9f3.lean.js
    index aeb33bd..40b1062 100644
    --- a/assets/tips_2023.3.5.md.38a1bfd0.lean.js
    +++ b/assets/tips_2023.3.5.md.2dbdb9f3.lean.js
    @@ -1 +1 @@
    -import{_ as e,c as s,o as a,a as n}from"./app.3e0f3fbc.js";const D=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"reg.source","slug":"reg-source","link":"#reg-source","children":[]},{"level":2,"title":"自动发版 semantic-release","slug":"自动发版-semantic-release","link":"#自动发版-semantic-release","children":[{"level":3,"title":"","slug":"","link":"#","children":[]}]}],"relativePath":"tips/2023.3.5.md"}'),l={name:"tips/2023.3.5.md"},r=n("",4),t=[r];function o(c,p,i,d,h,_){return a(),s("div",null,t)}const g=e(l,[["render",o]]);export{D as __pageData,g as default};
    +import{_ as e,c as s,o as a,a as n}from"./app.ec03d301.js";const D=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"reg.source","slug":"reg-source","link":"#reg-source","children":[]},{"level":2,"title":"自动发版 semantic-release","slug":"自动发版-semantic-release","link":"#自动发版-semantic-release","children":[{"level":3,"title":"","slug":"","link":"#","children":[]}]}],"relativePath":"tips/2023.3.5.md"}'),l={name:"tips/2023.3.5.md"},r=n("",4),t=[r];function o(c,p,i,d,h,_){return a(),s("div",null,t)}const g=e(l,[["render",o]]);export{D as __pageData,g as default};
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.js"
    similarity index 99%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.js"
    index 8d06cda..4d53dbd 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/cep.jpg",B=JSON.parse('{"title":"基于vue开发Adobe插件","description":"","frontmatter":{},"headers":[{"level":3,"title":"通过软链映射进行热更新","slug":"通过软链映射进行热更新","link":"#通过软链映射进行热更新","children":[]},{"level":3,"title":"初始模板渲染","slug":"初始模板渲染","link":"#初始模板渲染","children":[]},{"level":3,"title":"打包安装有机会再进行更新","slug":"打包安装有机会再进行更新","link":"#打包安装有机会再进行更新","children":[]},{"level":3,"title":"ELES?","slug":"eles","link":"#eles","children":[]}],"relativePath":"开发总结/Adobe-pr插件.md"}'),o={name:"开发总结/Adobe-pr插件.md"},t=l(`

    基于vue开发Adobe插件

    /CSXS 主要在该目录下建一个 mainifest.xml 的配置文件

    /client 主要包含前端界面资源,包括 Adobe CSInterface.js 等第三方库

    /jsx 主要包含 ExtendScript 后台运行文件

    /js 主要包含前端的渲染以及交互脚本

    DANGER

    在html进行跳转(端口为vue项目启动端口即可)

    WARNING

    本着不重复造轮子的原则,在这里我会以kuaizi团队开发的cep依赖为主

    kuaizi--cep

    通过软链映射进行热更新

    js
    fs.symlinkSync()
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/cep.jpg",B=JSON.parse('{"title":"基于vue开发Adobe插件","description":"","frontmatter":{},"headers":[{"level":3,"title":"通过软链映射进行热更新","slug":"通过软链映射进行热更新","link":"#通过软链映射进行热更新","children":[]},{"level":3,"title":"初始模板渲染","slug":"初始模板渲染","link":"#初始模板渲染","children":[]},{"level":3,"title":"打包安装有机会再进行更新","slug":"打包安装有机会再进行更新","link":"#打包安装有机会再进行更新","children":[]},{"level":3,"title":"ELES?","slug":"eles","link":"#eles","children":[]}],"relativePath":"开发总结/Adobe-pr插件.md"}'),o={name:"开发总结/Adobe-pr插件.md"},t=l(`

    基于vue开发Adobe插件

    /CSXS 主要在该目录下建一个 mainifest.xml 的配置文件

    /client 主要包含前端界面资源,包括 Adobe CSInterface.js 等第三方库

    /jsx 主要包含 ExtendScript 后台运行文件

    /js 主要包含前端的渲染以及交互脚本

    DANGER

    在html进行跳转(端口为vue项目启动端口即可)

    WARNING

    本着不重复造轮子的原则,在这里我会以kuaizi团队开发的cep依赖为主

    kuaizi--cep

    通过软链映射进行热更新

    js
    fs.symlinkSync()
     

    初始模板渲染

    alt

    引入该依赖
    js
    npm install @kuaizi/vue-cli-plugin-cep
     

    引入后运行时会创建软链(即快捷方式) mainfest.xml可以自动生成,也可以自己配置相关信息 以下为参考配置

    js
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     <ExtensionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ExtensionBundleId="com.xxx" ExtensionBundleName="xxx" ExtensionBundleVersion="1.0.0" Version="4.0">
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.lean.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.lean.js"
    similarity index 93%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.lean.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.lean.js"
    index 43d06d2..dda8217 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.e485d796.lean.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_Adobe-pr\346\217\222\344\273\266.md.03ac7388.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/cep.jpg",B=JSON.parse('{"title":"基于vue开发Adobe插件","description":"","frontmatter":{},"headers":[{"level":3,"title":"通过软链映射进行热更新","slug":"通过软链映射进行热更新","link":"#通过软链映射进行热更新","children":[]},{"level":3,"title":"初始模板渲染","slug":"初始模板渲染","link":"#初始模板渲染","children":[]},{"level":3,"title":"打包安装有机会再进行更新","slug":"打包安装有机会再进行更新","link":"#打包安装有机会再进行更新","children":[]},{"level":3,"title":"ELES?","slug":"eles","link":"#eles","children":[]}],"relativePath":"开发总结/Adobe-pr插件.md"}'),o={name:"开发总结/Adobe-pr插件.md"},t=l("",21),e=[t];function F(c,D,r,y,C,i){return a(),n("div",null,e)}const u=s(o,[["render",F]]);export{B as __pageData,u as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/cep.jpg",B=JSON.parse('{"title":"基于vue开发Adobe插件","description":"","frontmatter":{},"headers":[{"level":3,"title":"通过软链映射进行热更新","slug":"通过软链映射进行热更新","link":"#通过软链映射进行热更新","children":[]},{"level":3,"title":"初始模板渲染","slug":"初始模板渲染","link":"#初始模板渲染","children":[]},{"level":3,"title":"打包安装有机会再进行更新","slug":"打包安装有机会再进行更新","link":"#打包安装有机会再进行更新","children":[]},{"level":3,"title":"ELES?","slug":"eles","link":"#eles","children":[]}],"relativePath":"开发总结/Adobe-pr插件.md"}'),o={name:"开发总结/Adobe-pr插件.md"},t=l("",21),e=[t];function F(c,D,r,y,C,i){return a(),n("div",null,e)}const u=s(o,[["render",F]]);export{B as __pageData,u as default};
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.js"
    similarity index 98%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.js"
    index 9ee6814..5fc03b2 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"canvas框架实现的基本操作以及源码解析(konvajs)","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/canvas/canvas.md"}'),p={name:"开发总结/canvas/canvas.md"},o=l(`

    canvas框架实现的基本操作以及源码解析(konvajs)

    新建Stage类

    js
    var stage = new Konva.Stage({
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"canvas框架实现的基本操作以及源码解析(konvajs)","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/canvas/canvas.md"}'),p={name:"开发总结/canvas/canvas.md"},o=l(`

    canvas框架实现的基本操作以及源码解析(konvajs)

    新建Stage类

    js
    var stage = new Konva.Stage({
       container: 'container',   // id of container <div> *包裹舞台的DIV元素的ID
       width: 500,
       height: 500
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.lean.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.lean.js"
    similarity index 84%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.lean.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.lean.js"
    index 4658420..dc1be78 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.6c7d4746.lean.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_canvas_canvas.md.ebb83c7c.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"canvas框架实现的基本操作以及源码解析(konvajs)","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/canvas/canvas.md"}'),p={name:"开发总结/canvas/canvas.md"},o=l("",5),e=[o];function t(c,r,D,y,C,F){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{i as __pageData,h as default};
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"canvas框架实现的基本操作以及源码解析(konvajs)","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/canvas/canvas.md"}'),p={name:"开发总结/canvas/canvas.md"},o=l("",5),e=[o];function t(c,r,D,y,C,F){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{i as __pageData,h as default};
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.js"
    similarity index 93%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.js"
    index 43b45de..088e1eb 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.js"
    @@ -1 +1 @@
    -import{_ as e,c as a,o as t,a as i}from"./app.3e0f3fbc.js";const r="/HuaiGu/github_deploy.png",b=JSON.parse('{"title":"github deploy","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/github-deploy.md"}'),o={name:"开发总结/github-deploy.md"},d=i('

    github deploy

    在根目录配置github/workflows 新建 xx.yml文件

    alt

    配置page页面

    配置actions

    成功

    ',6),h=[d];function s(n,c,_,p,l,u){return t(),a("div",null,h)}const f=e(o,[["render",s]]);export{b as __pageData,f as default}; +import{_ as e,c as a,o as t,a as i}from"./app.ec03d301.js";const r="/HuaiGu/github_deploy.png",b=JSON.parse('{"title":"github deploy","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/github-deploy.md"}'),o={name:"开发总结/github-deploy.md"},d=i('

    github deploy

    在根目录配置github/workflows 新建 xx.yml文件

    alt

    配置page页面

    配置actions

    成功

    ',6),h=[d];function s(n,c,_,p,l,u){return t(),a("div",null,h)}const f=e(o,[["render",s]]);export{b as __pageData,f as default}; diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.lean.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.lean.js" similarity index 84% rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.lean.js" rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.lean.js" index 200b08d..673ff0a 100644 --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.db63c2d9.lean.js" +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_github-deploy.md.370d6a40.lean.js" @@ -1 +1 @@ -import{_ as e,c as a,o as t,a as i}from"./app.3e0f3fbc.js";const r="/HuaiGu/github_deploy.png",b=JSON.parse('{"title":"github deploy","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/github-deploy.md"}'),o={name:"开发总结/github-deploy.md"},d=i("",6),h=[d];function s(n,c,_,p,l,u){return t(),a("div",null,h)}const f=e(o,[["render",s]]);export{b as __pageData,f as default}; +import{_ as e,c as a,o as t,a as i}from"./app.ec03d301.js";const r="/HuaiGu/github_deploy.png",b=JSON.parse('{"title":"github deploy","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/github-deploy.md"}'),o={name:"开发总结/github-deploy.md"},d=i("",6),h=[d];function s(n,c,_,p,l,u){return t(),a("div",null,h)}const f=e(o,[["render",s]]);export{b as __pageData,f as default}; diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.js" similarity index 99% rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.js" rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.js" index 833c2de..15b51f1 100644 --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.js" +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"事故地点","description":"","frontmatter":{},"headers":[{"level":2,"title":"v-for v-if","slug":"v-for-v-if","link":"#v-for-v-if","children":[]},{"level":2,"title":"v-for","slug":"v-for","link":"#v-for","children":[]},{"level":2,"title":"v-if","slug":"v-if","link":"#v-if","children":[]}],"relativePath":"开发总结/v-for和v-if.md"}'),p={name:"开发总结/v-for和v-if.md"},o=l(`

    v-for v-if

    今天有个憨憨用了v-for 和v-if 出现bug了,特此记录一下

    v-for

    首先我们要对v-for 有一定的了解

    js
    v-for="(item,index) in DataList"
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"事故地点","description":"","frontmatter":{},"headers":[{"level":2,"title":"v-for v-if","slug":"v-for-v-if","link":"#v-for-v-if","children":[]},{"level":2,"title":"v-for","slug":"v-for","link":"#v-for","children":[]},{"level":2,"title":"v-if","slug":"v-if","link":"#v-if","children":[]}],"relativePath":"开发总结/v-for和v-if.md"}'),p={name:"开发总结/v-for和v-if.md"},o=l(`

    v-for v-if

    今天有个憨憨用了v-for 和v-if 出现bug了,特此记录一下

    v-for

    首先我们要对v-for 有一定的了解

    js
    v-for="(item,index) in DataList"
     // 遍历数组值
     

    。。。。。。补充明天再说

    v-if

    与 v-else v-else-if 连用

    事故地点

    js
    
     <!DOCTYPE html>
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.lean.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.lean.js"
    similarity index 89%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.lean.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.lean.js"
    index b1e8a00..54c1979 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.bfe8d707.lean.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_v-for\345\222\214v-if.md.0993cf0a.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"事故地点","description":"","frontmatter":{},"headers":[{"level":2,"title":"v-for v-if","slug":"v-for-v-if","link":"#v-for-v-if","children":[]},{"level":2,"title":"v-for","slug":"v-for","link":"#v-for","children":[]},{"level":2,"title":"v-if","slug":"v-if","link":"#v-if","children":[]}],"relativePath":"开发总结/v-for和v-if.md"}'),p={name:"开发总结/v-for和v-if.md"},o=l("",16),t=[o];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{A as __pageData,u as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"事故地点","description":"","frontmatter":{},"headers":[{"level":2,"title":"v-for v-if","slug":"v-for-v-if","link":"#v-for-v-if","children":[]},{"level":2,"title":"v-for","slug":"v-for","link":"#v-for","children":[]},{"level":2,"title":"v-if","slug":"v-if","link":"#v-if","children":[]}],"relativePath":"开发总结/v-for和v-if.md"}'),p={name:"开发总结/v-for和v-if.md"},o=l("",16),t=[o];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{A as __pageData,u as default};
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.js"
    similarity index 87%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.js"
    index 741b6fb..49827ad 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.js"
    @@ -1 +1 @@
    -import{_ as s,c as t,o as a,b as e}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/常用的库/css.md"}'),o={name:"开发总结/常用的库/css.md"},r=e("p",null,[e("a",{href:"https://getcssscan.com/css-box-shadow-examples?ref=producthunt",target:"_blank",rel:"noreferrer"},"box-shadow")],-1),c=[r];function n(_,d,p,l,i,f){return a(),t("div",null,c)}const u=s(o,[["render",n]]);export{m as __pageData,u as default};
    +import{_ as s,c as t,o as a,b as e}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/常用的库/css.md"}'),o={name:"开发总结/常用的库/css.md"},r=e("p",null,[e("a",{href:"https://getcssscan.com/css-box-shadow-examples?ref=producthunt",target:"_blank",rel:"noreferrer"},"box-shadow")],-1),c=[r];function n(_,d,p,l,i,f){return a(),t("div",null,c)}const u=s(o,[["render",n]]);export{m as __pageData,u as default};
    diff --git "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.lean.js" "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.lean.js"
    similarity index 87%
    rename from "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.lean.js"
    rename to "assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.lean.js"
    index 741b6fb..49827ad 100644
    --- "a/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.5e220525.lean.js"
    +++ "b/assets/\345\274\200\345\217\221\346\200\273\347\273\223_\345\270\270\347\224\250\347\232\204\345\272\223_css.md.c1c80c14.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as t,o as a,b as e}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/常用的库/css.md"}'),o={name:"开发总结/常用的库/css.md"},r=e("p",null,[e("a",{href:"https://getcssscan.com/css-box-shadow-examples?ref=producthunt",target:"_blank",rel:"noreferrer"},"box-shadow")],-1),c=[r];function n(_,d,p,l,i,f){return a(),t("div",null,c)}const u=s(o,[["render",n]]);export{m as __pageData,u as default};
    +import{_ as s,c as t,o as a,b as e}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"开发总结/常用的库/css.md"}'),o={name:"开发总结/常用的库/css.md"},r=e("p",null,[e("a",{href:"https://getcssscan.com/css-box-shadow-examples?ref=producthunt",target:"_blank",rel:"noreferrer"},"box-shadow")],-1),c=[r];function n(_,d,p,l,i,f){return a(),t("div",null,c)}const u=s(o,[["render",n]]);export{m as __pageData,u as default};
    diff --git "a/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.js" "b/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.js"
    similarity index 99%
    rename from "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.js"
    rename to "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.js"
    index 9b9f402..c857cd8 100644
    --- "a/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.js"
    +++ "b/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/层序遍历1.jpg",o="/HuaiGu/层序遍历2.jpg",e="/HuaiGu/层析遍历3.jpg",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"LeetCode  从上到下打印二叉树1","slug":"leetcode-从上到下打印二叉树1","link":"#leetcode-从上到下打印二叉树1","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树2","slug":"leetcode-从上到下打印二叉树2","link":"#leetcode-从上到下打印二叉树2","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树3","slug":"leetcode-从上到下打印二叉树3","link":"#leetcode-从上到下打印二叉树3","children":[]}],"relativePath":"算法/二叉树/层序遍历.md"}'),t={name:"算法/二叉树/层序遍历.md"},c=l('

    LeetCode 从上到下打印二叉树1

    alt

    😈 利用队列的先进先出很容易办到,遍历每一层的节点

    js
    var levelOrder = function(root) {
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/层序遍历1.jpg",o="/HuaiGu/层序遍历2.jpg",e="/HuaiGu/层析遍历3.jpg",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"LeetCode  从上到下打印二叉树1","slug":"leetcode-从上到下打印二叉树1","link":"#leetcode-从上到下打印二叉树1","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树2","slug":"leetcode-从上到下打印二叉树2","link":"#leetcode-从上到下打印二叉树2","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树3","slug":"leetcode-从上到下打印二叉树3","link":"#leetcode-从上到下打印二叉树3","children":[]}],"relativePath":"算法/二叉树/层序遍历.md"}'),t={name:"算法/二叉树/层序遍历.md"},c=l('

    LeetCode 从上到下打印二叉树1

    alt

    😈 利用队列的先进先出很容易办到,遍历每一层的节点

    js
    var levelOrder = function(root) {
         const res = [];
         if (!root) {
             return res;
    diff --git "a/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.lean.js" "b/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.lean.js"
    similarity index 93%
    rename from "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.lean.js"
    rename to "assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.lean.js"
    index e76faca..b141c71 100644
    --- "a/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.cfda8bdd.lean.js"
    +++ "b/assets/\347\256\227\346\263\225_\344\272\214\345\217\211\346\240\221_\345\261\202\345\272\217\351\201\215\345\216\206.md.ee74ccc4.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/层序遍历1.jpg",o="/HuaiGu/层序遍历2.jpg",e="/HuaiGu/层析遍历3.jpg",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"LeetCode  从上到下打印二叉树1","slug":"leetcode-从上到下打印二叉树1","link":"#leetcode-从上到下打印二叉树1","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树2","slug":"leetcode-从上到下打印二叉树2","link":"#leetcode-从上到下打印二叉树2","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树3","slug":"leetcode-从上到下打印二叉树3","link":"#leetcode-从上到下打印二叉树3","children":[]}],"relativePath":"算法/二叉树/层序遍历.md"}'),t={name:"算法/二叉树/层序遍历.md"},c=l("",11),r=[c];function F(y,D,A,C,i,d){return a(),n("div",null,r)}const u=s(t,[["render",F]]);export{f as __pageData,u as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/层序遍历1.jpg",o="/HuaiGu/层序遍历2.jpg",e="/HuaiGu/层析遍历3.jpg",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"LeetCode  从上到下打印二叉树1","slug":"leetcode-从上到下打印二叉树1","link":"#leetcode-从上到下打印二叉树1","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树2","slug":"leetcode-从上到下打印二叉树2","link":"#leetcode-从上到下打印二叉树2","children":[]},{"level":3,"title":"LeetCode 从上到下打印二叉树3","slug":"leetcode-从上到下打印二叉树3","link":"#leetcode-从上到下打印二叉树3","children":[]}],"relativePath":"算法/二叉树/层序遍历.md"}'),t={name:"算法/二叉树/层序遍历.md"},c=l("",11),r=[c];function F(y,D,A,C,i,d){return a(),n("div",null,r)}const u=s(t,[["render",F]]);export{f as __pageData,u as default};
    diff --git "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.js" "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.js"
    similarity index 95%
    rename from "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.js"
    rename to "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.js"
    index d9df8b2..8de128d 100644
    --- "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.js"
    +++ "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.js"
    @@ -1 +1 @@
    -import{_ as a,c as e,o as c,a as t}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"aa-bb-cc to AaBbCc","slug":"aa-bb-cc-to-aabbcc","link":"#aa-bb-cc-to-aabbcc","children":[]},{"level":2,"title":"算法实现模板字符串","slug":"算法实现模板字符串","link":"#算法实现模板字符串","children":[]},{"level":2,"title":"给一个数组,栈,依次入栈,且栈顶元素随时可以弹出","slug":"给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","link":"#给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","children":[]}],"relativePath":"算法/面试算法题/1.15七牛云春招笔试题.md"}'),r={name:"算法/面试算法题/1.15七牛云春招笔试题.md"},_=t('

    aa-bb-cc to AaBbCc

    算法实现模板字符串

    给一个数组,栈,依次入栈,且栈顶元素随时可以弹出

    ',3),i=[_];function n(o,d,s,l,h,b){return c(),e("div",null,i)}const f=a(r,[["render",n]]);export{u as __pageData,f as default}; +import{_ as a,c as e,o as c,a as t}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"aa-bb-cc to AaBbCc","slug":"aa-bb-cc-to-aabbcc","link":"#aa-bb-cc-to-aabbcc","children":[]},{"level":2,"title":"算法实现模板字符串","slug":"算法实现模板字符串","link":"#算法实现模板字符串","children":[]},{"level":2,"title":"给一个数组,栈,依次入栈,且栈顶元素随时可以弹出","slug":"给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","link":"#给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","children":[]}],"relativePath":"算法/面试算法题/1.15七牛云春招笔试题.md"}'),r={name:"算法/面试算法题/1.15七牛云春招笔试题.md"},_=t('

    aa-bb-cc to AaBbCc

    算法实现模板字符串

    给一个数组,栈,依次入栈,且栈顶元素随时可以弹出

    ',3),i=[_];function n(o,d,s,l,h,b){return c(),e("div",null,i)}const f=a(r,[["render",n]]);export{u as __pageData,f as default}; diff --git "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.lean.js" "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.lean.js" similarity index 93% rename from "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.lean.js" rename to "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.lean.js" index f1bc238..96135b7 100644 --- "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.b0eac2d8.lean.js" +++ "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.md.475ddde7.lean.js" @@ -1 +1 @@ -import{_ as a,c as e,o as c,a as t}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"aa-bb-cc to AaBbCc","slug":"aa-bb-cc-to-aabbcc","link":"#aa-bb-cc-to-aabbcc","children":[]},{"level":2,"title":"算法实现模板字符串","slug":"算法实现模板字符串","link":"#算法实现模板字符串","children":[]},{"level":2,"title":"给一个数组,栈,依次入栈,且栈顶元素随时可以弹出","slug":"给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","link":"#给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","children":[]}],"relativePath":"算法/面试算法题/1.15七牛云春招笔试题.md"}'),r={name:"算法/面试算法题/1.15七牛云春招笔试题.md"},_=t("",3),i=[_];function n(o,d,s,l,h,b){return c(),e("div",null,i)}const f=a(r,[["render",n]]);export{u as __pageData,f as default}; +import{_ as a,c as e,o as c,a as t}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"aa-bb-cc to AaBbCc","slug":"aa-bb-cc-to-aabbcc","link":"#aa-bb-cc-to-aabbcc","children":[]},{"level":2,"title":"算法实现模板字符串","slug":"算法实现模板字符串","link":"#算法实现模板字符串","children":[]},{"level":2,"title":"给一个数组,栈,依次入栈,且栈顶元素随时可以弹出","slug":"给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","link":"#给一个数组-栈-依次入栈-且栈顶元素随时可以弹出","children":[]}],"relativePath":"算法/面试算法题/1.15七牛云春招笔试题.md"}'),r={name:"算法/面试算法题/1.15七牛云春招笔试题.md"},_=t("",3),i=[_];function n(o,d,s,l,h,b){return c(),e("div",null,i)}const f=a(r,[["render",n]]);export{u as __pageData,f as default}; diff --git "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.js" "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.js" similarity index 99% rename from "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.js" rename to "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.js" index b0c301a..bfa830f 100644 --- "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.js" +++ "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"中文数字翻译成阿拉伯数字","description":"","frontmatter":{},"headers":[],"relativePath":"算法/面试算法题/1.7字节.md"}'),p={name:"算法/面试算法题/1.7字节.md"},o=l(`

    中文数字翻译成阿拉伯数字

    打印全排列

    js
    function fullpermutate(str) {
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"中文数字翻译成阿拉伯数字","description":"","frontmatter":{},"headers":[],"relativePath":"算法/面试算法题/1.7字节.md"}'),p={name:"算法/面试算法题/1.7字节.md"},o=l(`

    中文数字翻译成阿拉伯数字

    打印全排列

    js
    function fullpermutate(str) {
      var result = [];
      if (str.length > 1) {
        //遍历每一项
    diff --git "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.lean.js" "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.lean.js"
    similarity index 84%
    rename from "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.lean.js"
    rename to "assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.lean.js"
    index ea00c79..d107f2d 100644
    --- "a/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.aee69b51.lean.js"
    +++ "b/assets/\347\256\227\346\263\225_\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230_1.7\345\255\227\350\212\202.md.8afed0a6.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"中文数字翻译成阿拉伯数字","description":"","frontmatter":{},"headers":[],"relativePath":"算法/面试算法题/1.7字节.md"}'),p={name:"算法/面试算法题/1.7字节.md"},o=l("",3),t=[o];function e(c,r,F,y,D,C){return a(),n("div",null,t)}const _=s(p,[["render",e]]);export{i as __pageData,_ as default};
    +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"中文数字翻译成阿拉伯数字","description":"","frontmatter":{},"headers":[],"relativePath":"算法/面试算法题/1.7字节.md"}'),p={name:"算法/面试算法题/1.7字节.md"},o=l("",3),t=[o];function e(c,r,F,y,D,C){return a(),n("div",null,t)}const _=s(p,[["render",e]]);export{i as __pageData,_ as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.js"
    similarity index 94%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.js"
    index d9e90ce..7cef121 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.js"
    @@ -1 +1 @@
    -import{_ as t,c as e,o as a,a as o}from"./app.3e0f3fbc.js";const h=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/HTTP.md"}'),p={name:"计算机基础/HTTP.md"},T=o('

    HTTP

    version

    1. HTTP 0.9

    只有一个get , 一次TCP连接只能发送一次HTTP请求

    1. HTTP 1.0

    增加一些新方法 head post

    增加响应状态码, 对可能错误的原因进行标记

    引入 HTTP HEADER

    HTTP/1.0最核心的改变是增加了头部设定,头部内容以键值对的形式设置。请求头部通过 Accept 字段来告诉服务端可以接收的文件类型,响应头部再通过 Content-Type 字段来告诉浏览器返回文件的类型

    1. HTTP 1.1

    长连接: 引入TCP 连接复用

    引入管道机制 一个TCP连接,可以同时发送多个请求

    允许数据分块

    1. HTTP 2.0 不再使用ASCII 传输而是使用二进制数据来提升传输效率
    ',14),r=[T];function s(_,i,l,n,c,d){return a(),e("div",null,r)}const H=t(p,[["render",s]]);export{h as __pageData,H as default}; +import{_ as t,c as e,o as a,a as o}from"./app.ec03d301.js";const h=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/HTTP.md"}'),p={name:"计算机基础/HTTP.md"},T=o('

    HTTP

    version

    1. HTTP 0.9

    只有一个get , 一次TCP连接只能发送一次HTTP请求

    1. HTTP 1.0

    增加一些新方法 head post

    增加响应状态码, 对可能错误的原因进行标记

    引入 HTTP HEADER

    HTTP/1.0最核心的改变是增加了头部设定,头部内容以键值对的形式设置。请求头部通过 Accept 字段来告诉服务端可以接收的文件类型,响应头部再通过 Content-Type 字段来告诉浏览器返回文件的类型

    1. HTTP 1.1

    长连接: 引入TCP 连接复用

    引入管道机制 一个TCP连接,可以同时发送多个请求

    允许数据分块

    1. HTTP 2.0 不再使用ASCII 传输而是使用二进制数据来提升传输效率
    ',14),r=[T];function s(_,i,l,n,c,d){return a(),e("div",null,r)}const H=t(p,[["render",s]]);export{h as __pageData,H as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.lean.js" similarity index 81% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.lean.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.lean.js" index 8d815c3..171e34e 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.fad6f275.lean.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_HTTP.md.b7c09e53.lean.js" @@ -1 +1 @@ -import{_ as t,c as e,o as a,a as o}from"./app.3e0f3fbc.js";const h=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/HTTP.md"}'),p={name:"计算机基础/HTTP.md"},T=o("",14),r=[T];function s(_,i,l,n,c,d){return a(),e("div",null,r)}const H=t(p,[["render",s]]);export{h as __pageData,H as default}; +import{_ as t,c as e,o as a,a as o}from"./app.ec03d301.js";const h=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/HTTP.md"}'),p={name:"计算机基础/HTTP.md"},T=o("",14),r=[T];function s(_,i,l,n,c,d){return a(),e("div",null,r)}const H=t(p,[["render",s]]);export{h as __pageData,H as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.js" similarity index 99% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.js" index eecfc39..b836de1 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"代码冲突","slug":"代码冲突","link":"#代码冲突","children":[]},{"level":2,"title":"git分支管理","slug":"git分支管理","link":"#git分支管理","children":[]},{"level":2,"title":"git 提交规范","slug":"git-提交规范","link":"#git-提交规范","children":[]}],"relativePath":"计算机基础/git/git规范.md"}'),e={name:"计算机基础/git/git规范.md"},p=n(`

    代码冲突

    bash
    git merge xxxx_branch 或者 git pull  or
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"代码冲突","slug":"代码冲突","link":"#代码冲突","children":[]},{"level":2,"title":"git分支管理","slug":"git分支管理","link":"#git分支管理","children":[]},{"level":2,"title":"git 提交规范","slug":"git-提交规范","link":"#git-提交规范","children":[]}],"relativePath":"计算机基础/git/git规范.md"}'),e={name:"计算机基础/git/git规范.md"},p=n(`

    代码冲突

    bash
    git merge xxxx_branch 或者 git pull  or
     git rebase xxxx_branch 或者 git pull --rebase  
     解消方法也是修改冲突文件并删除冲突标识<<<<< ==== >>>:
     git rebase –continue //继续更新到最新的base上
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.lean.js"
    similarity index 90%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.lean.js"
    index 2190743..c117360 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.a5d5c677.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\247\204\350\214\203.md.6639eca7.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"代码冲突","slug":"代码冲突","link":"#代码冲突","children":[]},{"level":2,"title":"git分支管理","slug":"git分支管理","link":"#git分支管理","children":[]},{"level":2,"title":"git 提交规范","slug":"git-提交规范","link":"#git-提交规范","children":[]}],"relativePath":"计算机基础/git/git规范.md"}'),e={name:"计算机基础/git/git规范.md"},p=n("",9),o=[p];function t(r,c,C,i,y,A){return l(),a("div",null,o)}const g=s(e,[["render",t]]);export{d as __pageData,g as default};
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"代码冲突","slug":"代码冲突","link":"#代码冲突","children":[]},{"level":2,"title":"git分支管理","slug":"git分支管理","link":"#git分支管理","children":[]},{"level":2,"title":"git 提交规范","slug":"git-提交规范","link":"#git-提交规范","children":[]}],"relativePath":"计算机基础/git/git规范.md"}'),e={name:"计算机基础/git/git规范.md"},p=n("",9),o=[p];function t(r,c,C,i,y,A){return l(),a("div",null,o)}const g=s(e,[["render",t]]);export{d as __pageData,g as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.js"
    similarity index 98%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.js"
    index fe07e06..7897c63 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"git设置两个ssh密钥","slug":"git设置两个ssh密钥","link":"#git设置两个ssh密钥","children":[{"level":3,"title":"well have a try","slug":"well-have-a-try","link":"#well-have-a-try","children":[]}]},{"level":2,"title":"后续---","slug":"后续","link":"#后续","children":[]}],"relativePath":"计算机基础/git/git设置两个ssh密钥.md"}'),e={name:"计算机基础/git/git设置两个ssh密钥.md"},p=l(`

    git设置两个ssh密钥

    分为公司邮箱和个人邮箱 在ssh设置两个私钥并指定地址和私钥

    bash
    ssh-keygen -t rsa -C "123456@qq.com"
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"git设置两个ssh密钥","slug":"git设置两个ssh密钥","link":"#git设置两个ssh密钥","children":[{"level":3,"title":"well have a try","slug":"well-have-a-try","link":"#well-have-a-try","children":[]}]},{"level":2,"title":"后续---","slug":"后续","link":"#后续","children":[]}],"relativePath":"计算机基础/git/git设置两个ssh密钥.md"}'),e={name:"计算机基础/git/git设置两个ssh密钥.md"},p=l(`

    git设置两个ssh密钥

    分为公司邮箱和个人邮箱 在ssh设置两个私钥并指定地址和私钥

    bash
    ssh-keygen -t rsa -C "123456@qq.com"
     

    新建密钥并命名 假如为 gitlab_hyperchain_rsa_id (记得将公钥放进gitlab或者其他git平台)

    在C:\\Users\\ziyuhang.ssh\\中新建config文件并配置

    如下

    md
    # 配置github.com
     Host github.com                 
         HostName github.com
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.lean.js"
    similarity index 90%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.lean.js"
    index bea967b..ef32f08 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.3f15d8c1.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.md.d3256fac.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"git设置两个ssh密钥","slug":"git设置两个ssh密钥","link":"#git设置两个ssh密钥","children":[{"level":3,"title":"well have a try","slug":"well-have-a-try","link":"#well-have-a-try","children":[]}]},{"level":2,"title":"后续---","slug":"后续","link":"#后续","children":[]}],"relativePath":"计算机基础/git/git设置两个ssh密钥.md"}'),e={name:"计算机基础/git/git设置两个ssh密钥.md"},p=l("",11),t=[p];function o(c,i,r,h,C,y){return n(),a("div",null,t)}const g=s(e,[["render",o]]);export{A as __pageData,g as default};
    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"git设置两个ssh密钥","slug":"git设置两个ssh密钥","link":"#git设置两个ssh密钥","children":[{"level":3,"title":"well have a try","slug":"well-have-a-try","link":"#well-have-a-try","children":[]}]},{"level":2,"title":"后续---","slug":"后续","link":"#后续","children":[]}],"relativePath":"计算机基础/git/git设置两个ssh密钥.md"}'),e={name:"计算机基础/git/git设置两个ssh密钥.md"},p=l("",11),t=[p];function o(c,i,r,h,C,y){return n(),a("div",null,t)}const g=s(e,[["render",o]]);export{A as __pageData,g as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.js"
    similarity index 98%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.js"
    index ed2b873..4e441d5 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.js"
    @@ -1,3 +1,3 @@
    -import{_ as a,c as s,o as e,a as n}from"./app.3e0f3fbc.js";const t="/HuaiGu/git.png",_=JSON.parse('{"title":"git","description":"","frontmatter":{},"headers":[{"level":2,"title":"对比svn","slug":"对比svn","link":"#对比svn","children":[]},{"level":2,"title":"git config","slug":"git-config","link":"#git-config","children":[{"level":3,"title":"更多配置点这里","slug":"更多配置点这里","link":"#更多配置点这里","children":[]}]},{"level":2,"title":"分支的概念","slug":"分支的概念","link":"#分支的概念","children":[]}],"relativePath":"计算机基础/git/index.md"}'),l={name:"计算机基础/git/index.md"},o=n('

    git

    远端维护一个存储库,每个人从远端拉取代码 alt

    对比svn

    git 是分布式的,而svn是集中式的

    svn 严重依赖于服务器端 挂了就啥都没了 而git可以从另外的客户端获取所以代码

    git config

    git 配置分为全局配置和本地配置

    即命令行输入用带上 --global

    或者在全局配置文件中修改.gitconfig文件

    bash
    git config --global user.name "your-username"
    +import{_ as a,c as s,o as e,a as n}from"./app.ec03d301.js";const t="/HuaiGu/git.png",_=JSON.parse('{"title":"git","description":"","frontmatter":{},"headers":[{"level":2,"title":"对比svn","slug":"对比svn","link":"#对比svn","children":[]},{"level":2,"title":"git config","slug":"git-config","link":"#git-config","children":[{"level":3,"title":"更多配置点这里","slug":"更多配置点这里","link":"#更多配置点这里","children":[]}]},{"level":2,"title":"分支的概念","slug":"分支的概念","link":"#分支的概念","children":[]}],"relativePath":"计算机基础/git/index.md"}'),l={name:"计算机基础/git/index.md"},o=n('

    git

    远端维护一个存储库,每个人从远端拉取代码 alt

    对比svn

    git 是分布式的,而svn是集中式的

    svn 严重依赖于服务器端 挂了就啥都没了 而git可以从另外的客户端获取所以代码

    git config

    git 配置分为全局配置和本地配置

    即命令行输入用带上 --global

    或者在全局配置文件中修改.gitconfig文件

    bash
    git config --global user.name "your-username"
     git config --global user.email "your-email-address"
     

    更多配置点这里

    分支的概念

    A->B->D (main) A->C (master)

    git checkout <分支名字> 切换分支

    git merge <分支名字> 将此分支合并在当前分支

    `,15),r=[o];function i(p,c,g,h,d,u){return e(),s("div",null,r)}const D=a(l,[["render",i]]);export{_ as __pageData,D as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.lean.js" similarity index 91% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.lean.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.lean.js" index 4d2797d..dbd7e2d 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.472823ad.lean.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_index.md.b79aa9c1.lean.js" @@ -1 +1 @@ -import{_ as a,c as s,o as e,a as n}from"./app.3e0f3fbc.js";const t="/HuaiGu/git.png",_=JSON.parse('{"title":"git","description":"","frontmatter":{},"headers":[{"level":2,"title":"对比svn","slug":"对比svn","link":"#对比svn","children":[]},{"level":2,"title":"git config","slug":"git-config","link":"#git-config","children":[{"level":3,"title":"更多配置点这里","slug":"更多配置点这里","link":"#更多配置点这里","children":[]}]},{"level":2,"title":"分支的概念","slug":"分支的概念","link":"#分支的概念","children":[]}],"relativePath":"计算机基础/git/index.md"}'),l={name:"计算机基础/git/index.md"},o=n("",15),r=[o];function i(p,c,g,h,d,u){return e(),s("div",null,r)}const D=a(l,[["render",i]]);export{_ as __pageData,D as default}; +import{_ as a,c as s,o as e,a as n}from"./app.ec03d301.js";const t="/HuaiGu/git.png",_=JSON.parse('{"title":"git","description":"","frontmatter":{},"headers":[{"level":2,"title":"对比svn","slug":"对比svn","link":"#对比svn","children":[]},{"level":2,"title":"git config","slug":"git-config","link":"#git-config","children":[{"level":3,"title":"更多配置点这里","slug":"更多配置点这里","link":"#更多配置点这里","children":[]}]},{"level":2,"title":"分支的概念","slug":"分支的概念","link":"#分支的概念","children":[]}],"relativePath":"计算机基础/git/index.md"}'),l={name:"计算机基础/git/index.md"},o=n("",15),r=[o];function i(p,c,g,h,d,u){return e(),s("div",null,r)}const D=a(l,[["render",i]]);export{_ as __pageData,D as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.js" similarity index 95% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.js" index 9f1dcd9..4004527 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.js" @@ -1,2 +1,2 @@ -import{_ as s,c as a,o as e,a as t}from"./app.3e0f3fbc.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"配置别名","slug":"配置别名","link":"#配置别名","children":[]}],"relativePath":"计算机基础/git/tips.md"}'),o={name:"计算机基础/git/tips.md"},n=t(`

    配置别名

    展示git提交记录

    bash
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    +import{_ as s,c as a,o as e,a as t}from"./app.ec03d301.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"配置别名","slug":"配置别名","link":"#配置别名","children":[]}],"relativePath":"计算机基础/git/tips.md"}'),o={name:"计算机基础/git/tips.md"},n=t(`

    配置别名

    展示git提交记录

    bash
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
     
    `,3),l=[n];function p(r,c,i,_,d,C){return e(),a("div",null,l)}const y=s(o,[["render",p]]);export{g as __pageData,y as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.lean.js" similarity index 85% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.lean.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.lean.js" index f6c1806..898c708 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.e0872371.lean.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_tips.md.8d63ed5a.lean.js" @@ -1 +1 @@ -import{_ as s,c as a,o as e,a as t}from"./app.3e0f3fbc.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"配置别名","slug":"配置别名","link":"#配置别名","children":[]}],"relativePath":"计算机基础/git/tips.md"}'),o={name:"计算机基础/git/tips.md"},n=t("",3),l=[n];function p(r,c,i,_,d,C){return e(),a("div",null,l)}const y=s(o,[["render",p]]);export{g as __pageData,y as default}; +import{_ as s,c as a,o as e,a as t}from"./app.ec03d301.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"配置别名","slug":"配置别名","link":"#配置别名","children":[]}],"relativePath":"计算机基础/git/tips.md"}'),o={name:"计算机基础/git/tips.md"},n=t("",3),l=[n];function p(r,c,i,_,d,C){return e(),a("div",null,l)}const y=s(o,[["render",p]]);export{g as __pageData,y as default}; diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.js" similarity index 99% rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.js" rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.js" index 391c365..2b6e618 100644 --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.js" +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"git init","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/命令/init.md"}'),l={name:"计算机基础/git/命令/init.md"},o=p(`

    git init

    当我们使用 git init 命令会生成一个.git文件夹

    .git 文件夹目录结构 目录生成工具********treer

    js
    ├─COMMIT_EDITMSG
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const i=JSON.parse('{"title":"git init","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/命令/init.md"}'),l={name:"计算机基础/git/命令/init.md"},o=p(`

    git init

    当我们使用 git init 命令会生成一个.git文件夹

    .git 文件夹目录结构 目录生成工具********treer

    js
    ├─COMMIT_EDITMSG
     ├─config //保存配置
     ├─description // 对仓库的描述
     ├─FETCH_HEAD
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.lean.js"
    similarity index 83%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.lean.js"
    index a8f7840..438d734 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.7e49cf97.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_init.md.6f76688d.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"git init","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/命令/init.md"}'),l={name:"计算机基础/git/命令/init.md"},o=p("",4),e=[o];function c(D,t,r,C,y,A){return n(),a("div",null,e)}const d=s(l,[["render",c]]);export{i as __pageData,d as default};
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const i=JSON.parse('{"title":"git init","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/命令/init.md"}'),l={name:"计算机基础/git/命令/init.md"},o=p("",4),e=[o];function c(D,t,r,C,y,A){return n(),a("div",null,e)}const d=s(l,[["render",c]]);export{i as __pageData,d as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.js"
    similarity index 98%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.js"
    index ec8c304..67db034 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as e,a as n}from"./app.3e0f3fbc.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"merge","slug":"merge","link":"#merge","children":[]},{"level":2,"title":"Git merge有两种主要的合并策略:fast-forward和recursive","slug":"git-merge有两种主要的合并策略-fast-forward和recursive","link":"#git-merge有两种主要的合并策略-fast-forward和recursive","children":[{"level":3,"title":"fast-forward","slug":"fast-forward","link":"#fast-forward","children":[]},{"level":3,"title":"recursive","slug":"recursive","link":"#recursive","children":[]}]}],"relativePath":"计算机基础/git/命令/merge.md"}'),r={name:"计算机基础/git/命令/merge.md"},l=n(`

    merge

    当我们想合并某一个分支时可以存在冲突

    js
    //A分支
    +import{_ as s,c as a,o as e,a as n}from"./app.ec03d301.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"merge","slug":"merge","link":"#merge","children":[]},{"level":2,"title":"Git merge有两种主要的合并策略:fast-forward和recursive","slug":"git-merge有两种主要的合并策略-fast-forward和recursive","link":"#git-merge有两种主要的合并策略-fast-forward和recursive","children":[{"level":3,"title":"fast-forward","slug":"fast-forward","link":"#fast-forward","children":[]},{"level":3,"title":"recursive","slug":"recursive","link":"#recursive","children":[]}]}],"relativePath":"计算机基础/git/命令/merge.md"}'),r={name:"计算机基础/git/命令/merge.md"},l=n(`

    merge

    当我们想合并某一个分支时可以存在冲突

    js
    //A分支
     console.log("hello world Branch A")
     
    js
    //B分支
     console.log("hello world Branch B")
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.lean.js"
    similarity index 92%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.lean.js"
    index f6feee6..6c153c3 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.c7f4790b.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_merge.md.d452a38c.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as e,a as n}from"./app.3e0f3fbc.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"merge","slug":"merge","link":"#merge","children":[]},{"level":2,"title":"Git merge有两种主要的合并策略:fast-forward和recursive","slug":"git-merge有两种主要的合并策略-fast-forward和recursive","link":"#git-merge有两种主要的合并策略-fast-forward和recursive","children":[{"level":3,"title":"fast-forward","slug":"fast-forward","link":"#fast-forward","children":[]},{"level":3,"title":"recursive","slug":"recursive","link":"#recursive","children":[]}]}],"relativePath":"计算机基础/git/命令/merge.md"}'),r={name:"计算机基础/git/命令/merge.md"},l=n("",12),t=[l];function o(p,c,i,d,h,g){return e(),a("div",null,t)}const D=s(r,[["render",o]]);export{f as __pageData,D as default};
    +import{_ as s,c as a,o as e,a as n}from"./app.ec03d301.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"merge","slug":"merge","link":"#merge","children":[]},{"level":2,"title":"Git merge有两种主要的合并策略:fast-forward和recursive","slug":"git-merge有两种主要的合并策略-fast-forward和recursive","link":"#git-merge有两种主要的合并策略-fast-forward和recursive","children":[{"level":3,"title":"fast-forward","slug":"fast-forward","link":"#fast-forward","children":[]},{"level":3,"title":"recursive","slug":"recursive","link":"#recursive","children":[]}]}],"relativePath":"计算机基础/git/命令/merge.md"}'),r={name:"计算机基础/git/命令/merge.md"},l=n("",12),t=[l];function o(p,c,i,d,h,g){return e(),a("div",null,t)}const D=s(r,[["render",o]]);export{f as __pageData,D as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.js"
    similarity index 97%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.js"
    index 88b5cea..0e068f7 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const y=JSON.parse('{"title":"常用的可以在这里找到","description":"","frontmatter":{},"headers":[{"level":2,"title":"git pull","slug":"git-pull","link":"#git-pull","children":[]}],"relativePath":"计算机基础/git/命令/常用.md"}'),e={name:"计算机基础/git/命令/常用.md"},t=n(`

    常用的可以在这里找到

    git pull

    实际上是 git fetch + git merge 如果是--rebase 则为git fetch + git rebase

    bash
    git pull <远程主机> <远程分支>:<本地分支>
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const y=JSON.parse('{"title":"常用的可以在这里找到","description":"","frontmatter":{},"headers":[{"level":2,"title":"git pull","slug":"git-pull","link":"#git-pull","children":[]}],"relativePath":"计算机基础/git/命令/常用.md"}'),e={name:"计算机基础/git/命令/常用.md"},t=n(`

    常用的可以在这里找到

    git pull

    实际上是 git fetch + git merge 如果是--rebase 则为git fetch + git rebase

    bash
    git pull <远程主机> <远程分支>:<本地分支>
     
     git pull origin master 
     //拉取远程的master分支
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.lean.js"
    similarity index 86%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.lean.js"
    index 3ec2394..1ec80ba 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.67efdb60.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\221\275\344\273\244_\345\270\270\347\224\250.md.3e6fcac7.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as l,a as n}from"./app.3e0f3fbc.js";const y=JSON.parse('{"title":"常用的可以在这里找到","description":"","frontmatter":{},"headers":[{"level":2,"title":"git pull","slug":"git-pull","link":"#git-pull","children":[]}],"relativePath":"计算机基础/git/命令/常用.md"}'),e={name:"计算机基础/git/命令/常用.md"},t=n("",4),p=[t];function o(r,c,i,C,D,_){return l(),a("div",null,p)}const g=s(e,[["render",o]]);export{y as __pageData,g as default};
    +import{_ as s,c as a,o as l,a as n}from"./app.ec03d301.js";const y=JSON.parse('{"title":"常用的可以在这里找到","description":"","frontmatter":{},"headers":[{"level":2,"title":"git pull","slug":"git-pull","link":"#git-pull","children":[]}],"relativePath":"计算机基础/git/命令/常用.md"}'),e={name:"计算机基础/git/命令/常用.md"},t=n("",4),p=[t];function o(r,c,i,C,D,_){return l(),a("div",null,p)}const g=s(e,[["render",o]]);export{y as __pageData,g as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.js"
    similarity index 96%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.js"
    index 4a9d025..7acce5f 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as e}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"发版","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/发版.md"}'),p={name:"计算机基础/git/场景及解决方案/发版.md"},l=e(`

    发版

    发版位于 release 分支 修复bug 准备发版,当准备完毕后合并一部分bugfix的分支,再将这个合入master 随后合入dev 准备下一次开发

    开整

    bash
    git checkout dev
    +import{_ as s,c as a,o as n,a as e}from"./app.ec03d301.js";const d=JSON.parse('{"title":"发版","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/发版.md"}'),p={name:"计算机基础/git/场景及解决方案/发版.md"},l=e(`

    发版

    发版位于 release 分支 修复bug 准备发版,当准备完毕后合并一部分bugfix的分支,再将这个合入master 随后合入dev 准备下一次开发

    开整

    bash
    git checkout dev
     git merge feature
     git merge bugfix
     git branch release -b
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.lean.js"
    similarity index 84%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.lean.js"
    index d4ee7ea..1a887d3 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.e27f2008.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\217\221\347\211\210.md.a000055b.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as e}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"发版","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/发版.md"}'),p={name:"计算机基础/git/场景及解决方案/发版.md"},l=e("",4),o=[l];function t(c,r,C,i,y,_){return n(),a("div",null,o)}const D=s(p,[["render",t]]);export{d as __pageData,D as default};
    +import{_ as s,c as a,o as n,a as e}from"./app.ec03d301.js";const d=JSON.parse('{"title":"发版","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/发版.md"}'),p={name:"计算机基础/git/场景及解决方案/发版.md"},l=e("",4),o=[l];function t(c,r,C,i,y,_){return n(),a("div",null,o)}const D=s(p,[["render",t]]);export{d as __pageData,D as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.js"
    similarity index 98%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.js"
    index d43b185..bc86f34 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"当开发新功能","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/开发新功能.md"}'),l={name:"计算机基础/git/场景及解决方案/开发新功能.md"},e=p(`

    当开发新功能

    从dev分支新建feature分支 开发完合并进去

    bash
    git checkout -b feature dev 
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const d=JSON.parse('{"title":"当开发新功能","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/开发新功能.md"}'),l={name:"计算机基础/git/场景及解决方案/开发新功能.md"},e=p(`

    当开发新功能

    从dev分支新建feature分支 开发完合并进去

    bash
    git checkout -b feature dev 
     

    开发完后合并

    bash
    A->B-C-D dev
     |
     |->E-F  feature
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.lean.js"
    similarity index 85%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.lean.js"
    index d0c7878..24a72cc 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.7175aa69.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.md.f6f93872.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as n,a as p}from"./app.3e0f3fbc.js";const d=JSON.parse('{"title":"当开发新功能","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/开发新功能.md"}'),l={name:"计算机基础/git/场景及解决方案/开发新功能.md"},e=p("",13),o=[e];function t(c,r,C,i,y,D){return n(),a("div",null,o)}const g=s(l,[["render",t]]);export{d as __pageData,g as default};
    +import{_ as s,c as a,o as n,a as p}from"./app.ec03d301.js";const d=JSON.parse('{"title":"当开发新功能","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/git/场景及解决方案/开发新功能.md"}'),l={name:"计算机基础/git/场景及解决方案/开发新功能.md"},e=p("",13),o=[e];function t(c,r,C,i,y,D){return n(),a("div",null,o)}const g=s(l,[["render",t]]);export{d as __pageData,g as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.js"
    similarity index 90%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.js"
    index 8554e72..b50d92f 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.js"
    @@ -1 +1 @@
    -import{_ as t,c as a,o as r,b as e,d as s}from"./app.3e0f3fbc.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"当遇到紧急bug","slug":"当遇到紧急bug","link":"#当遇到紧急bug","children":[]}],"relativePath":"计算机基础/git/场景及解决方案/紧急bug.md"}'),o={name:"计算机基础/git/场景及解决方案/紧急bug.md"},n=e("h2",{id:"当遇到紧急bug",tabindex:"-1"},[s("当遇到紧急bug "),e("a",{class:"header-anchor",href:"#当遇到紧急bug","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,l,g,b){return r(),a("div",null,c)}const f=t(o,[["render",d]]);export{p as __pageData,f as default};
    +import{_ as t,c as a,o as r,b as e,d as s}from"./app.ec03d301.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"当遇到紧急bug","slug":"当遇到紧急bug","link":"#当遇到紧急bug","children":[]}],"relativePath":"计算机基础/git/场景及解决方案/紧急bug.md"}'),o={name:"计算机基础/git/场景及解决方案/紧急bug.md"},n=e("h2",{id:"当遇到紧急bug",tabindex:"-1"},[s("当遇到紧急bug "),e("a",{class:"header-anchor",href:"#当遇到紧急bug","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,l,g,b){return r(),a("div",null,c)}const f=t(o,[["render",d]]);export{p as __pageData,f as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.lean.js"
    similarity index 90%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.lean.js"
    index 8554e72..b50d92f 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.d0e3a2dc.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_git_\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210_\347\264\247\346\200\245bug.md.60e046a3.lean.js"
    @@ -1 +1 @@
    -import{_ as t,c as a,o as r,b as e,d as s}from"./app.3e0f3fbc.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"当遇到紧急bug","slug":"当遇到紧急bug","link":"#当遇到紧急bug","children":[]}],"relativePath":"计算机基础/git/场景及解决方案/紧急bug.md"}'),o={name:"计算机基础/git/场景及解决方案/紧急bug.md"},n=e("h2",{id:"当遇到紧急bug",tabindex:"-1"},[s("当遇到紧急bug "),e("a",{class:"header-anchor",href:"#当遇到紧急bug","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,l,g,b){return r(),a("div",null,c)}const f=t(o,[["render",d]]);export{p as __pageData,f as default};
    +import{_ as t,c as a,o as r,b as e,d as s}from"./app.ec03d301.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"当遇到紧急bug","slug":"当遇到紧急bug","link":"#当遇到紧急bug","children":[]}],"relativePath":"计算机基础/git/场景及解决方案/紧急bug.md"}'),o={name:"计算机基础/git/场景及解决方案/紧急bug.md"},n=e("h2",{id:"当遇到紧急bug",tabindex:"-1"},[s("当遇到紧急bug "),e("a",{class:"header-anchor",href:"#当遇到紧急bug","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,l,g,b){return r(),a("div",null,c)}const f=t(o,[["render",d]]);export{p as __pageData,f as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.js"
    similarity index 80%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.js"
    index f92c59f..3666599 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/index.md"}'),n={name:"计算机基础/index.md"};function r(o,s,c,d,i,p){return a(),t("div")}const f=e(n,[["render",r]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/index.md"}'),n={name:"计算机基础/index.md"};function r(o,s,c,d,i,p){return a(),t("div")}const f=e(n,[["render",r]]);export{m as __pageData,f as default};
    diff --git "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.lean.js" "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.lean.js"
    similarity index 80%
    rename from "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.lean.js"
    rename to "assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.lean.js"
    index f92c59f..3666599 100644
    --- "a/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.8d64b9be.lean.js"
    +++ "b/assets/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200_index.md.c01f4f9b.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./app.3e0f3fbc.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/index.md"}'),n={name:"计算机基础/index.md"};function r(o,s,c,d,i,p){return a(),t("div")}const f=e(n,[["render",r]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./app.ec03d301.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"计算机基础/index.md"}'),n={name:"计算机基础/index.md"};function r(o,s,c,d,i,p){return a(),t("div")}const f=e(n,[["render",r]]);export{m as __pageData,f as default};
    diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.js"
    similarity index 99%
    rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.js"
    rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.js"
    index 69d61cc..90fb5fb 100644
    --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.js"
    +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.js"
    @@ -1,4 +1,4 @@
    -import{_ as l,c as s,o as a,a as n}from"./app.3e0f3fbc.js";const D=JSON.parse('{"title":"HTML+CSS基础面试题","description":"","frontmatter":{},"headers":[{"level":2,"title":"HTML面试题","slug":"html面试题","link":"#html面试题","children":[]},{"level":2,"title":"CSS面试题","slug":"css面试题","link":"#css面试题","children":[{"level":3,"title":"布局","slug":"布局","link":"#布局","children":[]},{"level":3,"title":"定位","slug":"定位","link":"#定位","children":[]},{"level":3,"title":"图文样式","slug":"图文样式","link":"#图文样式","children":[]},{"level":3,"title":"响应式","slug":"响应式","link":"#响应式","children":[]},{"level":3,"title":"CSS3","slug":"css3","link":"#css3","children":[]}]}],"relativePath":"面试/CZ前端/HTML+CSS.md"}'),i={name:"面试/CZ前端/HTML+CSS.md"},e=n(`

    HTML+CSS基础面试题

    HTML面试题

    • 如何理解HTML语义化?

      • 让人更容易读(增加代码可读性)
      • 让搜索引擎更容易读(SEO)
    • 默认哪些HTML标签是块级,哪些是内联?

      • display:block/table; div h1 h2 table ul ol p等;不管内容多少都要独占一行
      • display:inline/inline-block; span img input button等;不会独占一行,直至浏览器的边缘
    • 什么是DOCTYPE,有何作用?

      • Doctype是HTML5的文档声明,通过它可以告诉浏览器,使用哪一个HTML版本标准解析文档
    • src和href的区别?

      • src全称source,通常用于img、video、audio、script元素,通过src指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src资源时,它会将资源下载并应用到文档内,比如说:js脚本、img图片、frame等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js脚本放在底部而不是头部的原因。
      • href:全称hyper reference,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a、link元素。
    • title和H1的区别、b与strong的区别、i与em的区别

      • title 属性表示网页的标题,h1 元素则表示层次明确的页面内容标题,对页面信息的抓取也有很大的影响
      • strong 是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:strong会重读,而b是展示强调内容、
      • iitalic(斜体)的简写,是早期的斜体元素,表示内容展示为斜体,而 ememphasize(强调)的简写,表示强调的文本
    • 什么是严格模式与混杂模式?

      • 严格模式:是以浏览器支持的最高标准运行
      • 混杂模式:页面以宽松向下兼容的方式显示,模拟老式浏览器的行为
    • H5和HTML5的区别?

      • H5是一个产品名词,包含了最新的HTML5、CSS3、ES6等新技术来制作的应用
      • HTML5是一个技术名词,指的就是第五代HTML
    • 对于web标准w3c的理解

      • Web标准简单来说可以分为结构、表现、行为。其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。行为指的是页面和用户具有一定的交互,这部分主要由JS组成
      • w3c,全称:world wide web consortium是一个制定各种标准的非盈利性组织,也叫万维网联盟,标准包括HTML、CSS、ECMAScript等等,web标准的制定有很多好处,比如说:
        • 可以统一开发流程,统一使用标准化开发工具(VSCode、WebStorm、Sublime),方便多人协作
        • 学习成本降低,只需要学习标准就行,否则就要学习各个浏览器厂商标准
        • 跨平台,方便迁移都不同设备
        • 降低代码维护成本
    • HTML5新增了哪些新特性?

      • HTML5主要是关于图像、位置、存储、多任务等功能的增加:
        • 语义化标签,如:article、footer、header、nav等
        • 视频video、音频audio
        • 画布canvas
        • 表单控件,calemdar、date、time、email
        • 地理
        • 本地离线存储,localStorage长期存储数据,浏览器关闭后数据不丢失,sessionStorage的数据在浏览器关闭后自动删除
        • 拖拽释放
    • 你知道SEO中的TDK吗?

      • 在SEO中,TDK其实就是titledescriptionkeywords这三个标签,title表示标题标签,description是描述标签,keywords是关键词标签

    CSS面试题

    布局

    • 盒子模型的宽度如何计算

      • 标准盒模型的宽等于offsetWidth =(内容宽度+内边距+边框),无外边距
      • 怪异盒模型,设置的宽度值包括 内容宽度+内边距+边框,自动压缩内容宽度
    • margin纵向重叠问题

      • 相邻元素的margin-top和margin-bottom会发生重叠
      • 空内容的p标签也会重叠
      • 答案:15px
    • margin的top left right bottom负值的情况?

      • margin-top/left负值,元素向上、左移动
      • margin-right负值,自身不受影响,右侧元素左移
      • margin-bottom负值,自身不受影响,下方元素上移
    • bfc的理解与应用?

      • Block format context, 块级格式化上下文

      • 是 一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素

      • 形成bfc的常见条件?

        • float不为none
        • position为absolute或fixed
        • overflow不为none,如hidden
        • display:flex inline-block等
      • bfc的常见应用

        • 清除浮动
    • float布局的问题,以及clearfix

      • 实现圣杯布局和双飞翼布局

        • 三栏布局,中间一栏最先加载和渲染(内容最重要)
        • 两侧内容固定,中间内容随宽度自适应
        • 一般用于pc网页
      • 圣杯布局和双飞翼布局的技术总结

        • 使用float布局
        • 两侧使用margin负值,以便和中间内容横向重叠
        • 防止中间内容被两侧覆盖,一个用padding,一个用margin
      • 手写clearfix

        • css
          .clearfix::after{
          +import{_ as l,c as s,o as a,a as n}from"./app.ec03d301.js";const D=JSON.parse('{"title":"HTML+CSS基础面试题","description":"","frontmatter":{},"headers":[{"level":2,"title":"HTML面试题","slug":"html面试题","link":"#html面试题","children":[]},{"level":2,"title":"CSS面试题","slug":"css面试题","link":"#css面试题","children":[{"level":3,"title":"布局","slug":"布局","link":"#布局","children":[]},{"level":3,"title":"定位","slug":"定位","link":"#定位","children":[]},{"level":3,"title":"图文样式","slug":"图文样式","link":"#图文样式","children":[]},{"level":3,"title":"响应式","slug":"响应式","link":"#响应式","children":[]},{"level":3,"title":"CSS3","slug":"css3","link":"#css3","children":[]}]}],"relativePath":"面试/CZ前端/HTML+CSS.md"}'),i={name:"面试/CZ前端/HTML+CSS.md"},e=n(`

          HTML+CSS基础面试题

          HTML面试题

          • 如何理解HTML语义化?

            • 让人更容易读(增加代码可读性)
            • 让搜索引擎更容易读(SEO)
          • 默认哪些HTML标签是块级,哪些是内联?

            • display:block/table; div h1 h2 table ul ol p等;不管内容多少都要独占一行
            • display:inline/inline-block; span img input button等;不会独占一行,直至浏览器的边缘
          • 什么是DOCTYPE,有何作用?

            • Doctype是HTML5的文档声明,通过它可以告诉浏览器,使用哪一个HTML版本标准解析文档
          • src和href的区别?

            • src全称source,通常用于img、video、audio、script元素,通过src指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src资源时,它会将资源下载并应用到文档内,比如说:js脚本、img图片、frame等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js脚本放在底部而不是头部的原因。
            • href:全称hyper reference,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a、link元素。
          • title和H1的区别、b与strong的区别、i与em的区别

            • title 属性表示网页的标题,h1 元素则表示层次明确的页面内容标题,对页面信息的抓取也有很大的影响
            • strong 是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:strong会重读,而b是展示强调内容、
            • iitalic(斜体)的简写,是早期的斜体元素,表示内容展示为斜体,而 ememphasize(强调)的简写,表示强调的文本
          • 什么是严格模式与混杂模式?

            • 严格模式:是以浏览器支持的最高标准运行
            • 混杂模式:页面以宽松向下兼容的方式显示,模拟老式浏览器的行为
          • H5和HTML5的区别?

            • H5是一个产品名词,包含了最新的HTML5、CSS3、ES6等新技术来制作的应用
            • HTML5是一个技术名词,指的就是第五代HTML
          • 对于web标准w3c的理解

            • Web标准简单来说可以分为结构、表现、行为。其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。行为指的是页面和用户具有一定的交互,这部分主要由JS组成
            • w3c,全称:world wide web consortium是一个制定各种标准的非盈利性组织,也叫万维网联盟,标准包括HTML、CSS、ECMAScript等等,web标准的制定有很多好处,比如说:
              • 可以统一开发流程,统一使用标准化开发工具(VSCode、WebStorm、Sublime),方便多人协作
              • 学习成本降低,只需要学习标准就行,否则就要学习各个浏览器厂商标准
              • 跨平台,方便迁移都不同设备
              • 降低代码维护成本
          • HTML5新增了哪些新特性?

            • HTML5主要是关于图像、位置、存储、多任务等功能的增加:
              • 语义化标签,如:article、footer、header、nav等
              • 视频video、音频audio
              • 画布canvas
              • 表单控件,calemdar、date、time、email
              • 地理
              • 本地离线存储,localStorage长期存储数据,浏览器关闭后数据不丢失,sessionStorage的数据在浏览器关闭后自动删除
              • 拖拽释放
          • 你知道SEO中的TDK吗?

            • 在SEO中,TDK其实就是titledescriptionkeywords这三个标签,title表示标题标签,description是描述标签,keywords是关键词标签

          CSS面试题

          布局

          • 盒子模型的宽度如何计算

            • 标准盒模型的宽等于offsetWidth =(内容宽度+内边距+边框),无外边距
            • 怪异盒模型,设置的宽度值包括 内容宽度+内边距+边框,自动压缩内容宽度
          • margin纵向重叠问题

            • 相邻元素的margin-top和margin-bottom会发生重叠
            • 空内容的p标签也会重叠
            • 答案:15px
          • margin的top left right bottom负值的情况?

            • margin-top/left负值,元素向上、左移动
            • margin-right负值,自身不受影响,右侧元素左移
            • margin-bottom负值,自身不受影响,下方元素上移
          • bfc的理解与应用?

            • Block format context, 块级格式化上下文

            • 是 一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素

            • 形成bfc的常见条件?

              • float不为none
              • position为absolute或fixed
              • overflow不为none,如hidden
              • display:flex inline-block等
            • bfc的常见应用

              • 清除浮动
          • float布局的问题,以及clearfix

            • 实现圣杯布局和双飞翼布局

              • 三栏布局,中间一栏最先加载和渲染(内容最重要)
              • 两侧内容固定,中间内容随宽度自适应
              • 一般用于pc网页
            • 圣杯布局和双飞翼布局的技术总结

              • 使用float布局
              • 两侧使用margin负值,以便和中间内容横向重叠
              • 防止中间内容被两侧覆盖,一个用padding,一个用margin
            • 手写clearfix

              • css
                .clearfix::after{
                       content:'';
                       display: table;
                       clear: both;
                diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.lean.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.lean.js"
                similarity index 93%
                rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.lean.js"
                rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.lean.js"
                index 01f25cb..6a0a89a 100644
                --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.22403196.lean.js"
                +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_HTML_CSS.md.54b3e357.lean.js"
                @@ -1 +1 @@
                -import{_ as l,c as s,o as a,a as n}from"./app.3e0f3fbc.js";const D=JSON.parse('{"title":"HTML+CSS基础面试题","description":"","frontmatter":{},"headers":[{"level":2,"title":"HTML面试题","slug":"html面试题","link":"#html面试题","children":[]},{"level":2,"title":"CSS面试题","slug":"css面试题","link":"#css面试题","children":[{"level":3,"title":"布局","slug":"布局","link":"#布局","children":[]},{"level":3,"title":"定位","slug":"定位","link":"#定位","children":[]},{"level":3,"title":"图文样式","slug":"图文样式","link":"#图文样式","children":[]},{"level":3,"title":"响应式","slug":"响应式","link":"#响应式","children":[]},{"level":3,"title":"CSS3","slug":"css3","link":"#css3","children":[]}]}],"relativePath":"面试/CZ前端/HTML+CSS.md"}'),i={name:"面试/CZ前端/HTML+CSS.md"},e=n("",14),p=[e];function o(t,c,r,d,u,h){return a(),s("div",null,p)}const C=l(i,[["render",o]]);export{D as __pageData,C as default};
                +import{_ as l,c as s,o as a,a as n}from"./app.ec03d301.js";const D=JSON.parse('{"title":"HTML+CSS基础面试题","description":"","frontmatter":{},"headers":[{"level":2,"title":"HTML面试题","slug":"html面试题","link":"#html面试题","children":[]},{"level":2,"title":"CSS面试题","slug":"css面试题","link":"#css面试题","children":[{"level":3,"title":"布局","slug":"布局","link":"#布局","children":[]},{"level":3,"title":"定位","slug":"定位","link":"#定位","children":[]},{"level":3,"title":"图文样式","slug":"图文样式","link":"#图文样式","children":[]},{"level":3,"title":"响应式","slug":"响应式","link":"#响应式","children":[]},{"level":3,"title":"CSS3","slug":"css3","link":"#css3","children":[]}]}],"relativePath":"面试/CZ前端/HTML+CSS.md"}'),i={name:"面试/CZ前端/HTML+CSS.md"},e=n("",14),p=[e];function o(t,c,r,d,u,h){return a(),s("div",null,p)}const C=l(i,[["render",o]]);export{D as __pageData,C as default};
                diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.js"
                similarity index 99%
                rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.js"
                rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.js"
                index ab01082..50d593c 100644
                --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.js"
                +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.js"
                @@ -1,4 +1,4 @@
                -import{_ as s,c as n,o as l,a}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"作用域和闭包","slug":"作用域和闭包","link":"#作用域和闭包","children":[{"level":3,"title":"作用域和自由变量","slug":"作用域和自由变量","link":"#作用域和自由变量","children":[]},{"level":3,"title":"闭包","slug":"闭包","link":"#闭包","children":[]},{"level":3,"title":"this","slug":"this","link":"#this","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/作用域和闭包.md"}'),p={name:"面试/CZ前端/JS基础/作用域和闭包.md"},o=a(`

                作用域和闭包

                作用域和自由变量

                • 作用域

                  • 全局作用域

                  • 函数作用域

                  • 块级作用域(es6新增) if/for/while...中的{}

                • 自由变量

                  • 一个变量在当前的作用域没有定义,但被使用了
                  • 向上级作用域查找,知道找到为止
                  • 如果直到全局作用域都没有找到,则报错 xxx is not defined

                闭包

                • 什么是闭包?

                  • 作用域应用的特殊情况,有两种表现:

                    • 函数作为参数被传递
                    • 函数作为返回值被传递
                  • js
                    // 函数作为返回值
                    +import{_ as s,c as n,o as l,a}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"作用域和闭包","slug":"作用域和闭包","link":"#作用域和闭包","children":[{"level":3,"title":"作用域和自由变量","slug":"作用域和自由变量","link":"#作用域和自由变量","children":[]},{"level":3,"title":"闭包","slug":"闭包","link":"#闭包","children":[]},{"level":3,"title":"this","slug":"this","link":"#this","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/作用域和闭包.md"}'),p={name:"面试/CZ前端/JS基础/作用域和闭包.md"},o=a(`

                    作用域和闭包

                    作用域和自由变量

                    • 作用域

                      • 全局作用域

                      • 函数作用域

                      • 块级作用域(es6新增) if/for/while...中的{}

                    • 自由变量

                      • 一个变量在当前的作用域没有定义,但被使用了
                      • 向上级作用域查找,知道找到为止
                      • 如果直到全局作用域都没有找到,则报错 xxx is not defined

                    闭包

                    • 什么是闭包?

                      • 作用域应用的特殊情况,有两种表现:

                        • 函数作为参数被传递
                        • 函数作为返回值被传递
                      • js
                        // 函数作为返回值
                         function create() {
                           const a = 100;
                           return function () {
                        diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.lean.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.lean.js"
                        similarity index 91%
                        rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.lean.js"
                        rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.lean.js"
                        index ff334e0..281f083 100644
                        --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.1ce14272.lean.js"
                        +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.md.b41c716d.lean.js"
                        @@ -1 +1 @@
                        -import{_ as s,c as n,o as l,a}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"作用域和闭包","slug":"作用域和闭包","link":"#作用域和闭包","children":[{"level":3,"title":"作用域和自由变量","slug":"作用域和自由变量","link":"#作用域和自由变量","children":[]},{"level":3,"title":"闭包","slug":"闭包","link":"#闭包","children":[]},{"level":3,"title":"this","slug":"this","link":"#this","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/作用域和闭包.md"}'),p={name:"面试/CZ前端/JS基础/作用域和闭包.md"},o=a("",8),e=[o];function t(c,r,y,F,i,D){return l(),n("div",null,e)}const u=s(p,[["render",t]]);export{C as __pageData,u as default};
                        +import{_ as s,c as n,o as l,a}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"作用域和闭包","slug":"作用域和闭包","link":"#作用域和闭包","children":[{"level":3,"title":"作用域和自由变量","slug":"作用域和自由变量","link":"#作用域和自由变量","children":[]},{"level":3,"title":"闭包","slug":"闭包","link":"#闭包","children":[]},{"level":3,"title":"this","slug":"this","link":"#this","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/作用域和闭包.md"}'),p={name:"面试/CZ前端/JS基础/作用域和闭包.md"},o=a("",8),e=[o];function t(c,r,y,F,i,D){return l(),n("div",null,e)}const u=s(p,[["render",t]]);export{C as __pageData,u as default};
                        diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.js"
                        similarity index 99%
                        rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.js"
                        rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.js"
                        index 5eb2390..e1c4217 100644
                        --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.js"
                        +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.js"
                        @@ -1,4 +1,4 @@
                        -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/assets/原型1.fcf47055.png",o="/HuaiGu/assets/原型2.0f904872.png",e="/HuaiGu/assets/原型3.875273fe.png",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"原型和原型链","slug":"原型和原型链","link":"#原型和原型链","children":[{"level":3,"title":"类型判断-instanceof","slug":"类型判断-instanceof","link":"#类型判断-instanceof","children":[]},{"level":3,"title":"原型","slug":"原型","link":"#原型","children":[]},{"level":3,"title":"原型链","slug":"原型链","link":"#原型链","children":[]},{"level":3,"title":"手写简易JQuery","slug":"手写简易jquery","link":"#手写简易jquery","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/原型和原型链.md"}'),t={name:"面试/CZ前端/JS基础/原型和原型链.md"},c=l(`

                        原型和原型链

                        类型判断-instanceof

                        js
                        //xialuo Student的实例,Student类继承People类 
                        +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/assets/原型1.fcf47055.png",o="/HuaiGu/assets/原型2.0f904872.png",e="/HuaiGu/assets/原型3.875273fe.png",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"原型和原型链","slug":"原型和原型链","link":"#原型和原型链","children":[{"level":3,"title":"类型判断-instanceof","slug":"类型判断-instanceof","link":"#类型判断-instanceof","children":[]},{"level":3,"title":"原型","slug":"原型","link":"#原型","children":[]},{"level":3,"title":"原型链","slug":"原型链","link":"#原型链","children":[]},{"level":3,"title":"手写简易JQuery","slug":"手写简易jquery","link":"#手写简易jquery","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/原型和原型链.md"}'),t={name:"面试/CZ前端/JS基础/原型和原型链.md"},c=l(`

                        原型和原型链

                        类型判断-instanceof

                        js
                        //xialuo Student的实例,Student类继承People类 
                         xialuo instanceof Student  // true
                         xialuo instanceof People  // true
                         xialuo instanceof Object  // true
                        diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.lean.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.lean.js"
                        similarity index 93%
                        rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.lean.js"
                        rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.lean.js"
                        index fe35522..133a573 100644
                        --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.25d2f4d7.lean.js"
                        +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.md.26402d30.lean.js"
                        @@ -1 +1 @@
                        -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const p="/HuaiGu/assets/原型1.fcf47055.png",o="/HuaiGu/assets/原型2.0f904872.png",e="/HuaiGu/assets/原型3.875273fe.png",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"原型和原型链","slug":"原型和原型链","link":"#原型和原型链","children":[{"level":3,"title":"类型判断-instanceof","slug":"类型判断-instanceof","link":"#类型判断-instanceof","children":[]},{"level":3,"title":"原型","slug":"原型","link":"#原型","children":[]},{"level":3,"title":"原型链","slug":"原型链","link":"#原型链","children":[]},{"level":3,"title":"手写简易JQuery","slug":"手写简易jquery","link":"#手写简易jquery","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/原型和原型链.md"}'),t={name:"面试/CZ前端/JS基础/原型和原型链.md"},c=l("",15),r=[c];function y(F,D,i,C,A,u){return a(),n("div",null,r)}const h=s(t,[["render",y]]);export{f as __pageData,h as default};
                        +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const p="/HuaiGu/assets/原型1.fcf47055.png",o="/HuaiGu/assets/原型2.0f904872.png",e="/HuaiGu/assets/原型3.875273fe.png",f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"原型和原型链","slug":"原型和原型链","link":"#原型和原型链","children":[{"level":3,"title":"类型判断-instanceof","slug":"类型判断-instanceof","link":"#类型判断-instanceof","children":[]},{"level":3,"title":"原型","slug":"原型","link":"#原型","children":[]},{"level":3,"title":"原型链","slug":"原型链","link":"#原型链","children":[]},{"level":3,"title":"手写简易JQuery","slug":"手写简易jquery","link":"#手写简易jquery","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/原型和原型链.md"}'),t={name:"面试/CZ前端/JS基础/原型和原型链.md"},c=l("",15),r=[c];function y(F,D,i,C,A,u){return a(),n("div",null,r)}const h=s(t,[["render",y]]);export{f as __pageData,h as default};
                        diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.js"
                        similarity index 99%
                        rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.js"
                        rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.js"
                        index d614ab9..3cc33dd 100644
                        --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.js"
                        +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.js"
                        @@ -1,4 +1,4 @@
                        -import{_ as s,c as n,o as l,a}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量类型和计算","slug":"变量类型和计算","link":"#变量类型和计算","children":[{"level":3,"title":"值类型与引用类型","slug":"值类型与引用类型","link":"#值类型与引用类型","children":[]},{"level":3,"title":"类型判断","slug":"类型判断","link":"#类型判断","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/变量类型和计算.md"}'),p={name:"面试/CZ前端/JS基础/变量类型和计算.md"},o=a(`

                        变量类型和计算

                        值类型与引用类型

                        • 常见的值类型

                          js
                          let a // undefined
                          +import{_ as s,c as n,o as l,a}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量类型和计算","slug":"变量类型和计算","link":"#变量类型和计算","children":[{"level":3,"title":"值类型与引用类型","slug":"值类型与引用类型","link":"#值类型与引用类型","children":[]},{"level":3,"title":"类型判断","slug":"类型判断","link":"#类型判断","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/变量类型和计算.md"}'),p={name:"面试/CZ前端/JS基础/变量类型和计算.md"},o=a(`

                          变量类型和计算

                          值类型与引用类型

                          • 常见的值类型

                            js
                            let a // undefined
                             const s = 'abc'
                             const n = 100
                             const b = true
                            diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.lean.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.lean.js"
                            similarity index 91%
                            rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.lean.js"
                            rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.lean.js"
                            index cc813f6..b3ca64b 100644
                            --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.40d0a56b.lean.js"
                            +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.md.23efe413.lean.js"
                            @@ -1 +1 @@
                            -import{_ as s,c as n,o as l,a}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量类型和计算","slug":"变量类型和计算","link":"#变量类型和计算","children":[{"level":3,"title":"值类型与引用类型","slug":"值类型与引用类型","link":"#值类型与引用类型","children":[]},{"level":3,"title":"类型判断","slug":"类型判断","link":"#类型判断","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/变量类型和计算.md"}'),p={name:"面试/CZ前端/JS基础/变量类型和计算.md"},o=a("",5),e=[o];function t(c,r,y,D,C,F){return l(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
                            +import{_ as s,c as n,o as l,a}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"变量类型和计算","slug":"变量类型和计算","link":"#变量类型和计算","children":[{"level":3,"title":"值类型与引用类型","slug":"值类型与引用类型","link":"#值类型与引用类型","children":[]},{"level":3,"title":"类型判断","slug":"类型判断","link":"#类型判断","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/变量类型和计算.md"}'),p={name:"面试/CZ前端/JS基础/变量类型和计算.md"},o=a("",5),e=[o];function t(c,r,y,D,C,F){return l(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
                            diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.js"
                            similarity index 99%
                            rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.js"
                            rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.js"
                            index dc8d3f3..8bcb86e 100644
                            --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.js"
                            +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.js"
                            @@ -1,4 +1,4 @@
                            -import{_ as s,c as l,o as n,a}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"异步","slug":"异步","link":"#异步","children":[{"level":3,"title":"Promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"defer和async","slug":"defer和async","link":"#defer和async","children":[]},{"level":3,"title":"生成器Generators/ yield","slug":"生成器generators-yield","link":"#生成器generators-yield","children":[]},{"level":3,"title":"event-loop(事件循环/轮询)","slug":"event-loop-事件循环-轮询","link":"#event-loop-事件循环-轮询","children":[]},{"level":3,"title":"async/await","slug":"async-await","link":"#async-await","children":[]},{"level":3,"title":"for ... of","slug":"for-of","link":"#for-of","children":[]},{"level":3,"title":"微任务/宏任务","slug":"微任务-宏任务","link":"#微任务-宏任务","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/异步.md"}'),o={name:"面试/CZ前端/JS基础/异步.md"},p=a(`

                            异步

                            • 同步

                              • 指在 主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务
                              • 也就是调用一旦开始,必须这个调用 返回结果(划重点——)才能继续往后执行。程序的执行顺序和任务排列顺序是一致的。
                            • 异步

                              • 异步任务是指不进入主线程,而进入 任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程。
                              • 程序的执行顺序和任务的排列顺序是不一致的。
                              • 用的setTimeout和setInterval函数,Ajax都是异步操作
                            • 实现异步的方法

                              • 回调函数(Callback)、事件监听、发布订阅、Promise/A+、生成器Generators/ yield、async/await

                            Promise

                            • ES6中的Promise 是异步编程的一种方案。从语法上讲,Promise 是一个对象,它可以获取异步操作的消息。
                            • Promise对象, 可以将异步操作以同步的流程表达出来。使用 Promise 主要有以下好处:
                              • 可以很好地解决回调地狱的问题
                              • 语法非常简洁。Promise 对象提供了简洁的API,使得控制异步操作更加容易。
                            • 状态的表现
                              • pending状态,不会触发then和catch
                              • resolved状态,会触发后续的then(onResloved)回调函数
                              • rejected状态,会触发then(null, onRejected),没有则触发后续的catch回调函数
                            • then和catch改变状态
                              • then正常返回resolved,里面报错则返回rejected
                              • catch正常也返回resolved,里面报错则返回rejected
                              • catch是一个语法糖,相当于调用Prmise.prototype.then(null, onRejected)
                            • Promise.all(iterable)
                              • 语法:var p = Promise.all([p1, p2, p3]);
                              • Promise.all方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)
                              • (1) 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
                              • (2) 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
                            • Promise.race(iterable)
                              • 语法:var p = Promise.race([p1, p2, p3]);
                              • Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。
                              • Promise.race方法的参数与Promise.all方法一样,如果不是Promise实例,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。

                            defer和async

                            • 区别主要在于一个执行时间,defer会在文档解析完之后执行,并且多个defer会按照顺序执行,而async则是在js加载好之后就会执行,并且多个async,哪个加载好就执行哪个

                            生成器Generators/ yield

                            • Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,Generator 最大的特点就是可以控制函数的执行。

                            • 语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

                            • Generator 函数除了状态机,还是一个遍历器对象生成函数

                            • 可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果

                            • yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值

                            • js
                              function *foo(x) {
                              +import{_ as s,c as l,o as n,a}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"异步","slug":"异步","link":"#异步","children":[{"level":3,"title":"Promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"defer和async","slug":"defer和async","link":"#defer和async","children":[]},{"level":3,"title":"生成器Generators/ yield","slug":"生成器generators-yield","link":"#生成器generators-yield","children":[]},{"level":3,"title":"event-loop(事件循环/轮询)","slug":"event-loop-事件循环-轮询","link":"#event-loop-事件循环-轮询","children":[]},{"level":3,"title":"async/await","slug":"async-await","link":"#async-await","children":[]},{"level":3,"title":"for ... of","slug":"for-of","link":"#for-of","children":[]},{"level":3,"title":"微任务/宏任务","slug":"微任务-宏任务","link":"#微任务-宏任务","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/异步.md"}'),o={name:"面试/CZ前端/JS基础/异步.md"},p=a(`

                              异步

                              • 同步

                                • 指在 主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务
                                • 也就是调用一旦开始,必须这个调用 返回结果(划重点——)才能继续往后执行。程序的执行顺序和任务排列顺序是一致的。
                              • 异步

                                • 异步任务是指不进入主线程,而进入 任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程。
                                • 程序的执行顺序和任务的排列顺序是不一致的。
                                • 用的setTimeout和setInterval函数,Ajax都是异步操作
                              • 实现异步的方法

                                • 回调函数(Callback)、事件监听、发布订阅、Promise/A+、生成器Generators/ yield、async/await

                              Promise

                              • ES6中的Promise 是异步编程的一种方案。从语法上讲,Promise 是一个对象,它可以获取异步操作的消息。
                              • Promise对象, 可以将异步操作以同步的流程表达出来。使用 Promise 主要有以下好处:
                                • 可以很好地解决回调地狱的问题
                                • 语法非常简洁。Promise 对象提供了简洁的API,使得控制异步操作更加容易。
                              • 状态的表现
                                • pending状态,不会触发then和catch
                                • resolved状态,会触发后续的then(onResloved)回调函数
                                • rejected状态,会触发then(null, onRejected),没有则触发后续的catch回调函数
                              • then和catch改变状态
                                • then正常返回resolved,里面报错则返回rejected
                                • catch正常也返回resolved,里面报错则返回rejected
                                • catch是一个语法糖,相当于调用Prmise.prototype.then(null, onRejected)
                              • Promise.all(iterable)
                                • 语法:var p = Promise.all([p1, p2, p3]);
                                • Promise.all方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)
                                • (1) 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
                                • (2) 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
                              • Promise.race(iterable)
                                • 语法:var p = Promise.race([p1, p2, p3]);
                                • Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。
                                • Promise.race方法的参数与Promise.all方法一样,如果不是Promise实例,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。

                              defer和async

                              • 区别主要在于一个执行时间,defer会在文档解析完之后执行,并且多个defer会按照顺序执行,而async则是在js加载好之后就会执行,并且多个async,哪个加载好就执行哪个

                              生成器Generators/ yield

                              • Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,Generator 最大的特点就是可以控制函数的执行。

                              • 语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

                              • Generator 函数除了状态机,还是一个遍历器对象生成函数

                              • 可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果

                              • yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值

                              • js
                                function *foo(x) {
                                   let y = 2 * (yield (x + 1))
                                   let z = yield (y / 3)
                                   return (x + y + z)
                                diff --git "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.lean.js" "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.lean.js"
                                similarity index 94%
                                rename from "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.lean.js"
                                rename to "assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.lean.js"
                                index 8d7b23c..1c42d67 100644
                                --- "a/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.7d03057e.lean.js"
                                +++ "b/assets/\351\235\242\350\257\225_CZ\345\211\215\347\253\257_JS\345\237\272\347\241\200_\345\274\202\346\255\245.md.1f21a706.lean.js"
                                @@ -1 +1 @@
                                -import{_ as s,c as l,o as n,a}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"异步","slug":"异步","link":"#异步","children":[{"level":3,"title":"Promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"defer和async","slug":"defer和async","link":"#defer和async","children":[]},{"level":3,"title":"生成器Generators/ yield","slug":"生成器generators-yield","link":"#生成器generators-yield","children":[]},{"level":3,"title":"event-loop(事件循环/轮询)","slug":"event-loop-事件循环-轮询","link":"#event-loop-事件循环-轮询","children":[]},{"level":3,"title":"async/await","slug":"async-await","link":"#async-await","children":[]},{"level":3,"title":"for ... of","slug":"for-of","link":"#for-of","children":[]},{"level":3,"title":"微任务/宏任务","slug":"微任务-宏任务","link":"#微任务-宏任务","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/异步.md"}'),o={name:"面试/CZ前端/JS基础/异步.md"},p=a("",16),e=[p];function t(c,r,y,i,F,D){return n(),l("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
                                +import{_ as s,c as l,o as n,a}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"异步","slug":"异步","link":"#异步","children":[{"level":3,"title":"Promise","slug":"promise","link":"#promise","children":[]},{"level":3,"title":"defer和async","slug":"defer和async","link":"#defer和async","children":[]},{"level":3,"title":"生成器Generators/ yield","slug":"生成器generators-yield","link":"#生成器generators-yield","children":[]},{"level":3,"title":"event-loop(事件循环/轮询)","slug":"event-loop-事件循环-轮询","link":"#event-loop-事件循环-轮询","children":[]},{"level":3,"title":"async/await","slug":"async-await","link":"#async-await","children":[]},{"level":3,"title":"for ... of","slug":"for-of","link":"#for-of","children":[]},{"level":3,"title":"微任务/宏任务","slug":"微任务-宏任务","link":"#微任务-宏任务","children":[]}]}],"relativePath":"面试/CZ前端/JS基础/异步.md"}'),o={name:"面试/CZ前端/JS基础/异步.md"},p=a("",16),e=[p];function t(c,r,y,i,F,D){return n(),l("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
                                diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.js"
                                similarity index 99%
                                rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.js"
                                rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.js"
                                index 015c604..ae314c1 100644
                                --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.js"
                                +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.js"
                                @@ -1 +1 @@
                                -import{_ as t,c as e,o as d,a as r}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"DOM和BOM","description":"","frontmatter":{},"headers":[{"level":2,"title":"JavaScript的结构","slug":"javascript的结构","link":"#javascript的结构","children":[]},{"level":2,"title":"DOM","slug":"dom","link":"#dom","children":[{"level":3,"title":"DOM树","slug":"dom树","link":"#dom树","children":[]},{"level":3,"title":"DOM操作元素方法","slug":"dom操作元素方法","link":"#dom操作元素方法","children":[]}]},{"level":2,"title":"BOM","slug":"bom","link":"#bom","children":[{"level":3,"title":"定义","slug":"定义","link":"#定义","children":[]},{"level":3,"title":"window对象常见事件","slug":"window对象常见事件","link":"#window对象常见事件","children":[]},{"level":3,"title":"location对象","slug":"location对象","link":"#location对象","children":[]},{"level":3,"title":"history对象","slug":"history对象","link":"#history对象","children":[]},{"level":3,"title":"navigator对象","slug":"navigator对象","link":"#navigator对象","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/DOM和BOM.md"}'),a={name:"面试/NONI/JS/JS基础/DOM和BOM.md"},i=r('

                                DOM和BOM

                                JavaScript的结构

                                JavaScript = ECMAscript + BOM + DOM

                                ECMAscript:JS的标准,规定了各个浏览器如何执行JS的语法。

                                DOM:用于操作XML、HTML文档的应用编程接口。给JS提供了访问和操作HTML元素的方法

                                BOM:浏览器对象模型,是控制浏览器行为的接口。

                                DOM

                                DOM树

                                HTML元素所构成的树

                                DOM操作元素方法

                                获取节点的DOM方法:

                                1. getElementById(id):通过元素的id属性获取单个元素节点,返回对象
                                2. getElementsByTagName(tagName):通过元素的标签名获取一组元素节点,返回数组
                                3. getElementsByClassName(className):通过元素的类名获取一组元素节点,返回数组
                                4. getElementsByName(name_content):通过元素的name属性值来获取元素,返回数组
                                5. querySelector(selector):通过选择器获取匹配的第一个元素节点,对象
                                6. querySelectorAll(selector):通过选择器获取匹配的所有元素节点,数组

                                获取/设置元素的属性值的DOM方法:

                                1. getAttribute(name):获取元素的指定属性值。
                                2. setAttribute(name, value):设置元素的指定属性值。
                                3. removeAttribute(name):移除元素的指定属性。

                                创建节点(Node)的DOM方法:

                                1. createElement(tagName):创建指定标签名的元素节点。
                                2. createTextNode(text):创建包含指定文本内容的文本节点。
                                3. createDocumentFragment():创建一个空的文档片段节点,可以用来存储和操作一组节点。

                                增添节点的DOM方法:

                                1. appendChild(node):将一个节点添加到父节点的子节点列表末尾。
                                2. insertBefore(newNode, referenceNode):在父节点的子节点列表中,在指定参考节点之前插入新节点。

                                删除节点的DOM方法:

                                1. removeChild(node):从父节点的子节点列表中移除指定节点。
                                2. parentNode.removeChild(node):通过父节点移除指定节点。

                                DOM常见的一些属性:

                                1. innerHTML:元素的HTML内容。
                                2. textContent:元素及其后代节点的文本内容。
                                3. className:元素的类名。
                                4. id:元素的唯一标识符。
                                5. style:元素的行内样式。
                                6. parentNode:元素的父节点。
                                7. childNodes:元素的子节点列表。
                                8. previousSibling:元素的前一个同级节点。
                                9. nextSibling:元素的后一个同级节点。

                                BOM

                                定义

                                浏览器对象模型,核心对象window,包含DOM。把浏览器作为对象来看待,顶级对象就是window,由一系列相关对象构成,并为每个对象提供方法和属性。

                                document,location,navigation,screen,history

                                window对象常见事件

                                属性/方法含义
                                opener当前窗口的父窗口
                                length窗口中的框架数
                                document窗口中当前显示的文档对象
                                alert(string)创建一个警告对话框,显示一条信息
                                close()关闭窗口
                                confirm()创建一个需要用户确认的对话框
                                open(url,name,[options])打开一个新窗口并返回新 window 对象
                                prompt(text,defaultInput)创建一个对话框要求用户输入信息
                                setInterval(expression,milliseconds)经过指定时间间隔计算一个表达式
                                setInterval(function,millis enconds,[arguments])经过指定时间间隔后调用一个函数
                                setTimeout(expression,milli seconds)在定时器超过后计算一个表达式
                                setTimeout(expression,milli seconds,[arguments])在定时器超过时后计算一个函数

                                location对象

                                location用于获取或设置URL,能够解析URL,返回对象

                                window.location = location = document.location

                                属性/方法内容
                                host主机名:端口号
                                hostname主机名
                                href整个 URL
                                pathname路径名
                                port端口号
                                protocol协议部分
                                search查询字符串
                                reload()重载当前 URL
                                repalce()用新的 URL 替换当前页面

                                history对象

                                与浏览器历史记录交互,包含用户访问过的URL(窗口打开开始记)

                                属性/方法描述
                                lengthhistory 对象中的记录数
                                back()前往浏览器历史条目前一个 URL,类似后退
                                forward()前往浏览器历史条目下一个 URL,类似前进
                                go(num)浏览器在 history 对象中向前或向后

                                BOM中识别客户端浏览器的一个window属性。

                                属性说明
                                appName完整的浏览器名称和版本信息
                                platform浏览器所在的系统平台
                                plugins浏览器中安装的插件信息的数 组
                                userAgent浏览器的用户代理字符串
                                userLanguage操作系统的默认语言
                                ',38),o=[i];function l(n,h,s,c,m,p){return d(),e("div",null,o)}const b=t(a,[["render",l]]);export{u as __pageData,b as default}; +import{_ as t,c as e,o as d,a as r}from"./app.ec03d301.js";const u=JSON.parse('{"title":"DOM和BOM","description":"","frontmatter":{},"headers":[{"level":2,"title":"JavaScript的结构","slug":"javascript的结构","link":"#javascript的结构","children":[]},{"level":2,"title":"DOM","slug":"dom","link":"#dom","children":[{"level":3,"title":"DOM树","slug":"dom树","link":"#dom树","children":[]},{"level":3,"title":"DOM操作元素方法","slug":"dom操作元素方法","link":"#dom操作元素方法","children":[]}]},{"level":2,"title":"BOM","slug":"bom","link":"#bom","children":[{"level":3,"title":"定义","slug":"定义","link":"#定义","children":[]},{"level":3,"title":"window对象常见事件","slug":"window对象常见事件","link":"#window对象常见事件","children":[]},{"level":3,"title":"location对象","slug":"location对象","link":"#location对象","children":[]},{"level":3,"title":"history对象","slug":"history对象","link":"#history对象","children":[]},{"level":3,"title":"navigator对象","slug":"navigator对象","link":"#navigator对象","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/DOM和BOM.md"}'),a={name:"面试/NONI/JS/JS基础/DOM和BOM.md"},i=r('

                                DOM和BOM

                                JavaScript的结构

                                JavaScript = ECMAscript + BOM + DOM

                                ECMAscript:JS的标准,规定了各个浏览器如何执行JS的语法。

                                DOM:用于操作XML、HTML文档的应用编程接口。给JS提供了访问和操作HTML元素的方法

                                BOM:浏览器对象模型,是控制浏览器行为的接口。

                                DOM

                                DOM树

                                HTML元素所构成的树

                                DOM操作元素方法

                                获取节点的DOM方法:

                                1. getElementById(id):通过元素的id属性获取单个元素节点,返回对象
                                2. getElementsByTagName(tagName):通过元素的标签名获取一组元素节点,返回数组
                                3. getElementsByClassName(className):通过元素的类名获取一组元素节点,返回数组
                                4. getElementsByName(name_content):通过元素的name属性值来获取元素,返回数组
                                5. querySelector(selector):通过选择器获取匹配的第一个元素节点,对象
                                6. querySelectorAll(selector):通过选择器获取匹配的所有元素节点,数组

                                获取/设置元素的属性值的DOM方法:

                                1. getAttribute(name):获取元素的指定属性值。
                                2. setAttribute(name, value):设置元素的指定属性值。
                                3. removeAttribute(name):移除元素的指定属性。

                                创建节点(Node)的DOM方法:

                                1. createElement(tagName):创建指定标签名的元素节点。
                                2. createTextNode(text):创建包含指定文本内容的文本节点。
                                3. createDocumentFragment():创建一个空的文档片段节点,可以用来存储和操作一组节点。

                                增添节点的DOM方法:

                                1. appendChild(node):将一个节点添加到父节点的子节点列表末尾。
                                2. insertBefore(newNode, referenceNode):在父节点的子节点列表中,在指定参考节点之前插入新节点。

                                删除节点的DOM方法:

                                1. removeChild(node):从父节点的子节点列表中移除指定节点。
                                2. parentNode.removeChild(node):通过父节点移除指定节点。

                                DOM常见的一些属性:

                                1. innerHTML:元素的HTML内容。
                                2. textContent:元素及其后代节点的文本内容。
                                3. className:元素的类名。
                                4. id:元素的唯一标识符。
                                5. style:元素的行内样式。
                                6. parentNode:元素的父节点。
                                7. childNodes:元素的子节点列表。
                                8. previousSibling:元素的前一个同级节点。
                                9. nextSibling:元素的后一个同级节点。

                                BOM

                                定义

                                浏览器对象模型,核心对象window,包含DOM。把浏览器作为对象来看待,顶级对象就是window,由一系列相关对象构成,并为每个对象提供方法和属性。

                                document,location,navigation,screen,history

                                window对象常见事件

                                属性/方法含义
                                opener当前窗口的父窗口
                                length窗口中的框架数
                                document窗口中当前显示的文档对象
                                alert(string)创建一个警告对话框,显示一条信息
                                close()关闭窗口
                                confirm()创建一个需要用户确认的对话框
                                open(url,name,[options])打开一个新窗口并返回新 window 对象
                                prompt(text,defaultInput)创建一个对话框要求用户输入信息
                                setInterval(expression,milliseconds)经过指定时间间隔计算一个表达式
                                setInterval(function,millis enconds,[arguments])经过指定时间间隔后调用一个函数
                                setTimeout(expression,milli seconds)在定时器超过后计算一个表达式
                                setTimeout(expression,milli seconds,[arguments])在定时器超过时后计算一个函数

                                location对象

                                location用于获取或设置URL,能够解析URL,返回对象

                                window.location = location = document.location

                                属性/方法内容
                                host主机名:端口号
                                hostname主机名
                                href整个 URL
                                pathname路径名
                                port端口号
                                protocol协议部分
                                search查询字符串
                                reload()重载当前 URL
                                repalce()用新的 URL 替换当前页面

                                history对象

                                与浏览器历史记录交互,包含用户访问过的URL(窗口打开开始记)

                                属性/方法描述
                                lengthhistory 对象中的记录数
                                back()前往浏览器历史条目前一个 URL,类似后退
                                forward()前往浏览器历史条目下一个 URL,类似前进
                                go(num)浏览器在 history 对象中向前或向后

                                BOM中识别客户端浏览器的一个window属性。

                                属性说明
                                appName完整的浏览器名称和版本信息
                                platform浏览器所在的系统平台
                                plugins浏览器中安装的插件信息的数 组
                                userAgent浏览器的用户代理字符串
                                userLanguage操作系统的默认语言
                                ',38),o=[i];function l(n,h,s,c,m,p){return d(),e("div",null,o)}const b=t(a,[["render",l]]);export{u as __pageData,b as default}; diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.lean.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.lean.js" similarity index 95% rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.lean.js" rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.lean.js" index ae20a27..c31c570 100644 --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.63677668.lean.js" +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_DOM\345\222\214BOM.md.08038994.lean.js" @@ -1 +1 @@ -import{_ as t,c as e,o as d,a as r}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"DOM和BOM","description":"","frontmatter":{},"headers":[{"level":2,"title":"JavaScript的结构","slug":"javascript的结构","link":"#javascript的结构","children":[]},{"level":2,"title":"DOM","slug":"dom","link":"#dom","children":[{"level":3,"title":"DOM树","slug":"dom树","link":"#dom树","children":[]},{"level":3,"title":"DOM操作元素方法","slug":"dom操作元素方法","link":"#dom操作元素方法","children":[]}]},{"level":2,"title":"BOM","slug":"bom","link":"#bom","children":[{"level":3,"title":"定义","slug":"定义","link":"#定义","children":[]},{"level":3,"title":"window对象常见事件","slug":"window对象常见事件","link":"#window对象常见事件","children":[]},{"level":3,"title":"location对象","slug":"location对象","link":"#location对象","children":[]},{"level":3,"title":"history对象","slug":"history对象","link":"#history对象","children":[]},{"level":3,"title":"navigator对象","slug":"navigator对象","link":"#navigator对象","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/DOM和BOM.md"}'),a={name:"面试/NONI/JS/JS基础/DOM和BOM.md"},i=r("",38),o=[i];function l(n,h,s,c,m,p){return d(),e("div",null,o)}const b=t(a,[["render",l]]);export{u as __pageData,b as default}; +import{_ as t,c as e,o as d,a as r}from"./app.ec03d301.js";const u=JSON.parse('{"title":"DOM和BOM","description":"","frontmatter":{},"headers":[{"level":2,"title":"JavaScript的结构","slug":"javascript的结构","link":"#javascript的结构","children":[]},{"level":2,"title":"DOM","slug":"dom","link":"#dom","children":[{"level":3,"title":"DOM树","slug":"dom树","link":"#dom树","children":[]},{"level":3,"title":"DOM操作元素方法","slug":"dom操作元素方法","link":"#dom操作元素方法","children":[]}]},{"level":2,"title":"BOM","slug":"bom","link":"#bom","children":[{"level":3,"title":"定义","slug":"定义","link":"#定义","children":[]},{"level":3,"title":"window对象常见事件","slug":"window对象常见事件","link":"#window对象常见事件","children":[]},{"level":3,"title":"location对象","slug":"location对象","link":"#location对象","children":[]},{"level":3,"title":"history对象","slug":"history对象","link":"#history对象","children":[]},{"level":3,"title":"navigator对象","slug":"navigator对象","link":"#navigator对象","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/DOM和BOM.md"}'),a={name:"面试/NONI/JS/JS基础/DOM和BOM.md"},i=r("",38),o=[i];function l(n,h,s,c,m,p){return d(),e("div",null,o)}const b=t(a,[["render",l]]);export{u as __pageData,b as default}; diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.js" similarity index 99% rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.js" rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.js" index da6a191..9b7de6e 100644 --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.js" +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"new操作符的实现原理","slug":"new操作符的实现原理","link":"#new操作符的实现原理","children":[{"level":3,"title":"new操作符的定义","slug":"new操作符的定义","link":"#new操作符的定义","children":[]},{"level":3,"title":"示例2(对象属性为其他对象)","slug":"示例2-对象属性为其他对象","link":"#示例2-对象属性为其他对象","children":[]},{"level":3,"title":"原理阐述","slug":"原理阐述","link":"#原理阐述","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/new操作符实现原理.md"}'),o={name:"面试/NONI/JS/JS基础/new操作符实现原理.md"},p=l(`

                                new操作符的实现原理

                                new操作符的定义

                                使用示例(对象类型和对象实例)

                                new操作符可以用来创建一个用户定义的对象类型的实例具有构造函数的内置对象的实例。(来自MDN的定义)

                                简而言之:new可以创建对象实例

                                使用场景:

                                js
                                function newTest(arguments1,arguments2) {	//构造一个函数newTest
                                +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"new操作符的实现原理","slug":"new操作符的实现原理","link":"#new操作符的实现原理","children":[{"level":3,"title":"new操作符的定义","slug":"new操作符的定义","link":"#new操作符的定义","children":[]},{"level":3,"title":"示例2(对象属性为其他对象)","slug":"示例2-对象属性为其他对象","link":"#示例2-对象属性为其他对象","children":[]},{"level":3,"title":"原理阐述","slug":"原理阐述","link":"#原理阐述","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/new操作符实现原理.md"}'),o={name:"面试/NONI/JS/JS基础/new操作符实现原理.md"},p=l(`

                                new操作符的实现原理

                                new操作符的定义

                                使用示例(对象类型和对象实例)

                                new操作符可以用来创建一个用户定义的对象类型的实例具有构造函数的内置对象的实例。(来自MDN的定义)

                                简而言之:new可以创建对象实例

                                使用场景:

                                js
                                function newTest(arguments1,arguments2) {	//构造一个函数newTest
                                     this.arguments1 = arguments1;
                                     this.arguments2 = arguments2;
                                 }
                                diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.lean.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.lean.js"
                                similarity index 93%
                                rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.lean.js"
                                rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.lean.js"
                                index 5d1ec75..dc51f0a 100644
                                --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.1a272ca6.lean.js"
                                +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.md.34fe56c4.lean.js"
                                @@ -1 +1 @@
                                -import{_ as s,c as n,o as a,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"new操作符的实现原理","slug":"new操作符的实现原理","link":"#new操作符的实现原理","children":[{"level":3,"title":"new操作符的定义","slug":"new操作符的定义","link":"#new操作符的定义","children":[]},{"level":3,"title":"示例2(对象属性为其他对象)","slug":"示例2-对象属性为其他对象","link":"#示例2-对象属性为其他对象","children":[]},{"level":3,"title":"原理阐述","slug":"原理阐述","link":"#原理阐述","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/new操作符实现原理.md"}'),o={name:"面试/NONI/JS/JS基础/new操作符实现原理.md"},p=l("",17),e=[p];function t(c,r,y,D,F,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
                                +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"new操作符的实现原理","slug":"new操作符的实现原理","link":"#new操作符的实现原理","children":[{"level":3,"title":"new操作符的定义","slug":"new操作符的定义","link":"#new操作符的定义","children":[]},{"level":3,"title":"示例2(对象属性为其他对象)","slug":"示例2-对象属性为其他对象","link":"#示例2-对象属性为其他对象","children":[]},{"level":3,"title":"原理阐述","slug":"原理阐述","link":"#原理阐述","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/new操作符实现原理.md"}'),o={name:"面试/NONI/JS/JS基础/new操作符实现原理.md"},p=l("",17),e=[p];function t(c,r,y,D,F,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
                                diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.js"
                                new file mode 100644
                                index 0000000..e4a187c
                                --- /dev/null
                                +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.js"
                                @@ -0,0 +1,55 @@
                                +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"面试/NONI/JS/JS基础/手写call.md"}'),p={name:"面试/NONI/JS/JS基础/手写call.md"},o=l(`
                                js
                                Function.prototype.myCall = function (context) {
                                +  if (context === null || context === undefined) {
                                +    context = window;
                                +  }
                                +
                                +  // 将 context 转换为对象
                                +  let type = typeof context;
                                +  switch (type) {
                                +    case "string":
                                +      context = new String(context);
                                +      break;
                                +    case "boolean":
                                +      context = new Boolean(context);
                                +      break;
                                +    case "number":
                                +      context = new Number(context);
                                +      break;
                                +  }
                                +
                                +  // 生成唯一的属性名,避免与已有属性冲突
                                +  let key = Date.now().toString(36);
                                +  context[key] = this;
                                +
                                +  // 获取参数并执行函数
                                +  let args = Array.from(arguments).slice(1);
                                +  let result = context[key](...args);
                                +
                                +  // 删除临时属性
                                +  delete context[key];
                                +
                                +  return result;
                                +};
                                +
                                +var obj = {
                                +  name: "lucky",
                                +  fn: function () {
                                +    console.log("hello");
                                +  },
                                +};
                                +
                                +function fn1(a, b) {
                                +  console.log(this, a + b);
                                +  return "123";
                                +}
                                +
                                +console.log(fn1.call(obj, 1, 2));
                                +
                                +fn1.myCall(obj, 1, 2);
                                +fn1.myCall(null, 1, 2);
                                +fn1.myCall(undefined, 1, 2);
                                +fn1.myCall(1, 1, 2);
                                +fn1.myCall("str", 1, 2);
                                +fn1.myCall(true, 1, 2);
                                + 
                                +
                                `,1),e=[o];function t(c,F,r,y,D,C){return a(),n("div",null,e)}const f=s(p,[["render",t]]);export{i as __pageData,f as default}; diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.lean.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.lean.js" new file mode 100644 index 0000000..2874e42 --- /dev/null +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\211\213\345\206\231call.md.e99ab99f.lean.js" @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"面试/NONI/JS/JS基础/手写call.md"}'),p={name:"面试/NONI/JS/JS基础/手写call.md"},o=l("",1),e=[o];function t(c,F,r,y,D,C){return a(),n("div",null,e)}const f=s(p,[["render",t]]);export{i as __pageData,f as default}; diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.js" similarity index 99% rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.js" rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.js" index c157769..865aa68 100644 --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.js" +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"数组原生方法","slug":"数组原生方法","link":"#数组原生方法","children":[{"level":3,"title":"一、数组和字符串的转换方法(不改变原数组)","slug":"一、数组和字符串的转换方法-不改变原数组","link":"#一、数组和字符串的转换方法-不改变原数组","children":[]},{"level":3,"title":"二、数组尾部操作方法(改变原数组)","slug":"二、数组尾部操作方法-改变原数组","link":"#二、数组尾部操作方法-改变原数组","children":[]},{"level":3,"title":"三、数组首部操作方法(改变原数组)","slug":"三、数组首部操作方法-改变原数组","link":"#三、数组首部操作方法-改变原数组","children":[]},{"level":3,"title":"四、重排序的方法(改变原数组)","slug":"四、重排序的方法-改变原数组","link":"#四、重排序的方法-改变原数组","children":[]},{"level":3,"title":"五、数组连接的方法(不改变原数组)","slug":"五、数组连接的方法-不改变原数组","link":"#五、数组连接的方法-不改变原数组","children":[]},{"level":3,"title":"六、数组截取浅拷贝方法(不改变原数组)","slug":"六、数组截取浅拷贝方法-不改变原数组","link":"#六、数组截取浅拷贝方法-不改变原数组","children":[]},{"level":3,"title":"七、数组插入方法(改变原数组)","slug":"七、数组插入方法-改变原数组","link":"#七、数组插入方法-改变原数组","children":[]},{"level":3,"title":"八、查找特性项的索引的方法","slug":"八、查找特性项的索引的方法","link":"#八、查找特性项的索引的方法","children":[]},{"level":3,"title":"九、数组迭代方法","slug":"九、数组迭代方法","link":"#九、数组迭代方法","children":[]},{"level":3,"title":"十、数组归并方法","slug":"十、数组归并方法","link":"#十、数组归并方法","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/数组原生方法.md"}'),p={name:"面试/NONI/JS/JS基础/数组原生方法.md"},o=l(`

                                数组原生方法

                                一、数组和字符串的转换方法(不改变原数组)

                                • toString() :将数组转换成⼀个字符串;

                                • join() :将数组用连接符连接成一个字符串。

                                  js
                                  const arr = [1,2,'b','c']
                                  +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"数组原生方法","slug":"数组原生方法","link":"#数组原生方法","children":[{"level":3,"title":"一、数组和字符串的转换方法(不改变原数组)","slug":"一、数组和字符串的转换方法-不改变原数组","link":"#一、数组和字符串的转换方法-不改变原数组","children":[]},{"level":3,"title":"二、数组尾部操作方法(改变原数组)","slug":"二、数组尾部操作方法-改变原数组","link":"#二、数组尾部操作方法-改变原数组","children":[]},{"level":3,"title":"三、数组首部操作方法(改变原数组)","slug":"三、数组首部操作方法-改变原数组","link":"#三、数组首部操作方法-改变原数组","children":[]},{"level":3,"title":"四、重排序的方法(改变原数组)","slug":"四、重排序的方法-改变原数组","link":"#四、重排序的方法-改变原数组","children":[]},{"level":3,"title":"五、数组连接的方法(不改变原数组)","slug":"五、数组连接的方法-不改变原数组","link":"#五、数组连接的方法-不改变原数组","children":[]},{"level":3,"title":"六、数组截取浅拷贝方法(不改变原数组)","slug":"六、数组截取浅拷贝方法-不改变原数组","link":"#六、数组截取浅拷贝方法-不改变原数组","children":[]},{"level":3,"title":"七、数组插入方法(改变原数组)","slug":"七、数组插入方法-改变原数组","link":"#七、数组插入方法-改变原数组","children":[]},{"level":3,"title":"八、查找特性项的索引的方法","slug":"八、查找特性项的索引的方法","link":"#八、查找特性项的索引的方法","children":[]},{"level":3,"title":"九、数组迭代方法","slug":"九、数组迭代方法","link":"#九、数组迭代方法","children":[]},{"level":3,"title":"十、数组归并方法","slug":"十、数组归并方法","link":"#十、数组归并方法","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/数组原生方法.md"}'),p={name:"面试/NONI/JS/JS基础/数组原生方法.md"},o=l(`

                                  数组原生方法

                                  一、数组和字符串的转换方法(不改变原数组)

                                  • toString() :将数组转换成⼀个字符串;

                                  • join() :将数组用连接符连接成一个字符串。

                                    js
                                    const arr = [1,2,'b','c']
                                     const change1 = arr.toString()
                                     console.log(arr,change1)//(4) [1, 2, 'b', 'c'] '1,2,b,c'
                                     const change2 = arr.join('')
                                    diff --git "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.lean.js" "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.lean.js"
                                    similarity index 97%
                                    rename from "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.lean.js"
                                    rename to "assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.lean.js"
                                    index 40dd25a..2f3258f 100644
                                    --- "a/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.e14135a0.lean.js"
                                    +++ "b/assets/\351\235\242\350\257\225_NONI_JS_JS\345\237\272\347\241\200_\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.md.a422a38c.lean.js"
                                    @@ -1 +1 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"数组原生方法","slug":"数组原生方法","link":"#数组原生方法","children":[{"level":3,"title":"一、数组和字符串的转换方法(不改变原数组)","slug":"一、数组和字符串的转换方法-不改变原数组","link":"#一、数组和字符串的转换方法-不改变原数组","children":[]},{"level":3,"title":"二、数组尾部操作方法(改变原数组)","slug":"二、数组尾部操作方法-改变原数组","link":"#二、数组尾部操作方法-改变原数组","children":[]},{"level":3,"title":"三、数组首部操作方法(改变原数组)","slug":"三、数组首部操作方法-改变原数组","link":"#三、数组首部操作方法-改变原数组","children":[]},{"level":3,"title":"四、重排序的方法(改变原数组)","slug":"四、重排序的方法-改变原数组","link":"#四、重排序的方法-改变原数组","children":[]},{"level":3,"title":"五、数组连接的方法(不改变原数组)","slug":"五、数组连接的方法-不改变原数组","link":"#五、数组连接的方法-不改变原数组","children":[]},{"level":3,"title":"六、数组截取浅拷贝方法(不改变原数组)","slug":"六、数组截取浅拷贝方法-不改变原数组","link":"#六、数组截取浅拷贝方法-不改变原数组","children":[]},{"level":3,"title":"七、数组插入方法(改变原数组)","slug":"七、数组插入方法-改变原数组","link":"#七、数组插入方法-改变原数组","children":[]},{"level":3,"title":"八、查找特性项的索引的方法","slug":"八、查找特性项的索引的方法","link":"#八、查找特性项的索引的方法","children":[]},{"level":3,"title":"九、数组迭代方法","slug":"九、数组迭代方法","link":"#九、数组迭代方法","children":[]},{"level":3,"title":"十、数组归并方法","slug":"十、数组归并方法","link":"#十、数组归并方法","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/数组原生方法.md"}'),p={name:"面试/NONI/JS/JS基础/数组原生方法.md"},o=l("",42),e=[o];function t(c,r,y,D,C,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"数组原生方法","slug":"数组原生方法","link":"#数组原生方法","children":[{"level":3,"title":"一、数组和字符串的转换方法(不改变原数组)","slug":"一、数组和字符串的转换方法-不改变原数组","link":"#一、数组和字符串的转换方法-不改变原数组","children":[]},{"level":3,"title":"二、数组尾部操作方法(改变原数组)","slug":"二、数组尾部操作方法-改变原数组","link":"#二、数组尾部操作方法-改变原数组","children":[]},{"level":3,"title":"三、数组首部操作方法(改变原数组)","slug":"三、数组首部操作方法-改变原数组","link":"#三、数组首部操作方法-改变原数组","children":[]},{"level":3,"title":"四、重排序的方法(改变原数组)","slug":"四、重排序的方法-改变原数组","link":"#四、重排序的方法-改变原数组","children":[]},{"level":3,"title":"五、数组连接的方法(不改变原数组)","slug":"五、数组连接的方法-不改变原数组","link":"#五、数组连接的方法-不改变原数组","children":[]},{"level":3,"title":"六、数组截取浅拷贝方法(不改变原数组)","slug":"六、数组截取浅拷贝方法-不改变原数组","link":"#六、数组截取浅拷贝方法-不改变原数组","children":[]},{"level":3,"title":"七、数组插入方法(改变原数组)","slug":"七、数组插入方法-改变原数组","link":"#七、数组插入方法-改变原数组","children":[]},{"level":3,"title":"八、查找特性项的索引的方法","slug":"八、查找特性项的索引的方法","link":"#八、查找特性项的索引的方法","children":[]},{"level":3,"title":"九、数组迭代方法","slug":"九、数组迭代方法","link":"#九、数组迭代方法","children":[]},{"level":3,"title":"十、数组归并方法","slug":"十、数组归并方法","link":"#十、数组归并方法","children":[]}]}],"relativePath":"面试/NONI/JS/JS基础/数组原生方法.md"}'),p={name:"面试/NONI/JS/JS基础/数组原生方法.md"},o=l("",42),e=[o];function t(c,r,y,D,C,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
                                    diff --git "a/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.js" "b/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.js"
                                    similarity index 99%
                                    rename from "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.js"
                                    rename to "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.js"
                                    index 61d9369..0248f2c 100644
                                    --- "a/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.js"
                                    +++ "b/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.js"
                                    @@ -1,4 +1,4 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"v-if和v-for同时使用问题","description":"","frontmatter":{},"headers":[{"level":2,"title":"实例","slug":"实例","link":"#实例","children":[]},{"level":2,"title":"不推荐使用原因","slug":"不推荐使用原因","link":"#不推荐使用原因","children":[]},{"level":2,"title":"替代方法","slug":"替代方法","link":"#替代方法","children":[{"level":3,"title":"方法一","slug":"方法一","link":"#方法一","children":[]},{"level":3,"title":"方法二","slug":"方法二","link":"#方法二","children":[]}]},{"level":2,"title":"总结","slug":"总结","link":"#总结","children":[]}],"relativePath":"面试/NONI/Vue/v-if和v-for同时使用问题.md"}'),o={name:"面试/NONI/Vue/v-if和v-for同时使用问题.md"},e=l(`

                                    v-if和v-for同时使用问题

                                    在vue2的官方文档中提到了不推荐v-if和v-for同时使用,给出的解释是在两者中,v-for具有比v-if更高的优先级(vue2)。

                                    实例

                                    html
                                    <ul>
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const u=JSON.parse('{"title":"v-if和v-for同时使用问题","description":"","frontmatter":{},"headers":[{"level":2,"title":"实例","slug":"实例","link":"#实例","children":[]},{"level":2,"title":"不推荐使用原因","slug":"不推荐使用原因","link":"#不推荐使用原因","children":[]},{"level":2,"title":"替代方法","slug":"替代方法","link":"#替代方法","children":[{"level":3,"title":"方法一","slug":"方法一","link":"#方法一","children":[]},{"level":3,"title":"方法二","slug":"方法二","link":"#方法二","children":[]}]},{"level":2,"title":"总结","slug":"总结","link":"#总结","children":[]}],"relativePath":"面试/NONI/Vue/v-if和v-for同时使用问题.md"}'),o={name:"面试/NONI/Vue/v-if和v-for同时使用问题.md"},e=l(`

                                    v-if和v-for同时使用问题

                                    在vue2的官方文档中提到了不推荐v-if和v-for同时使用,给出的解释是在两者中,v-for具有比v-if更高的优先级(vue2)。

                                    实例

                                    html
                                    <ul>
                                      <li
                                       v-for="user in users"
                                       v-if="user.isActive"
                                    diff --git "a/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.lean.js" "b/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.lean.js"
                                    similarity index 93%
                                    rename from "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.lean.js"
                                    rename to "assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.lean.js"
                                    index 4c1115d..def08c3 100644
                                    --- "a/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.8897125f.lean.js"
                                    +++ "b/assets/\351\235\242\350\257\225_NONI_Vue_v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.md.11bafd55.lean.js"
                                    @@ -1 +1 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"v-if和v-for同时使用问题","description":"","frontmatter":{},"headers":[{"level":2,"title":"实例","slug":"实例","link":"#实例","children":[]},{"level":2,"title":"不推荐使用原因","slug":"不推荐使用原因","link":"#不推荐使用原因","children":[]},{"level":2,"title":"替代方法","slug":"替代方法","link":"#替代方法","children":[{"level":3,"title":"方法一","slug":"方法一","link":"#方法一","children":[]},{"level":3,"title":"方法二","slug":"方法二","link":"#方法二","children":[]}]},{"level":2,"title":"总结","slug":"总结","link":"#总结","children":[]}],"relativePath":"面试/NONI/Vue/v-if和v-for同时使用问题.md"}'),o={name:"面试/NONI/Vue/v-if和v-for同时使用问题.md"},e=l("",30),p=[e];function c(t,r,i,F,D,y){return n(),a("div",null,p)}const h=s(o,[["render",c]]);export{u as __pageData,h as default};
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const u=JSON.parse('{"title":"v-if和v-for同时使用问题","description":"","frontmatter":{},"headers":[{"level":2,"title":"实例","slug":"实例","link":"#实例","children":[]},{"level":2,"title":"不推荐使用原因","slug":"不推荐使用原因","link":"#不推荐使用原因","children":[]},{"level":2,"title":"替代方法","slug":"替代方法","link":"#替代方法","children":[{"level":3,"title":"方法一","slug":"方法一","link":"#方法一","children":[]},{"level":3,"title":"方法二","slug":"方法二","link":"#方法二","children":[]}]},{"level":2,"title":"总结","slug":"总结","link":"#总结","children":[]}],"relativePath":"面试/NONI/Vue/v-if和v-for同时使用问题.md"}'),o={name:"面试/NONI/Vue/v-if和v-for同时使用问题.md"},e=l("",30),p=[e];function c(t,r,i,F,D,y){return n(),a("div",null,p)}const h=s(o,[["render",c]]);export{u as __pageData,h as default};
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.js"
                                    similarity index 97%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.js"
                                    index 9036189..bbd4617 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.js"
                                    @@ -1,2 +1,2 @@
                                    -import{_ as e,c as a,o as t,a as r}from"./app.3e0f3fbc.js";const x=JSON.parse('{"title":"强缓存","description":"","frontmatter":{},"headers":[{"level":2,"title":"Expires","slug":"expires","link":"#expires","children":[]},{"level":2,"title":"Cache-Control","slug":"cache-control","link":"#cache-control","children":[]},{"level":2,"title":"ETag","slug":"etag","link":"#etag","children":[]},{"level":2,"title":"对比HTTP1.x","slug":"对比http1-x","link":"#对比http1-x","children":[]}],"relativePath":"面试/前端/HTTP/HTTP的优先级.md"}'),l={name:"面试/前端/HTTP/HTTP的优先级.md"},i=r(`

                                    强缓存

                                    Expires(HTTP/1.0)和Cache-Control(HTTP1.1),其中Cache-Control优先级高于Expires 位于请求/响应头

                                    Expires

                                    Expires: Wed, 22 Oct 2018 08:41:00 GMT
                                    +import{_ as e,c as a,o as t,a as r}from"./app.ec03d301.js";const x=JSON.parse('{"title":"强缓存","description":"","frontmatter":{},"headers":[{"level":2,"title":"Expires","slug":"expires","link":"#expires","children":[]},{"level":2,"title":"Cache-Control","slug":"cache-control","link":"#cache-control","children":[]},{"level":2,"title":"ETag","slug":"etag","link":"#etag","children":[]},{"level":2,"title":"对比HTTP1.x","slug":"对比http1-x","link":"#对比http1-x","children":[]}],"relativePath":"面试/前端/HTTP/HTTP的优先级.md"}'),l={name:"面试/前端/HTTP/HTTP的优先级.md"},i=r(`

                                    强缓存

                                    Expires(HTTP/1.0)和Cache-Control(HTTP1.1),其中Cache-Control优先级高于Expires 位于请求/响应头

                                    Expires

                                    Expires: Wed, 22 Oct 2018 08:41:00 GMT
                                     

                                    由于Expires受制于客户端时间,修改客户端时间可能导致缓存失效

                                    Cache-Control

                                    请求/响应头,缓存控制字段,精确控制缓存策略 这里涉及到的字段是max-age,Cache-Control还有其他字段

                                    协商缓存

                                    1. 没有 Cache-Control 和 Expires
                                    2. Cache-Control 和 Expires 过期
                                    3. 设置了 no-cache

                                    如果有更新即更新缓存 200 没有缓存则更新浏览器缓存有效期 304

                                    ETag

                                    对比HTTP1.x

                                    使用HTTP/1.x,浏览器可以完全控制资源加载顺序。每个连接一次只能支持一个资源请求,服务器会尽快返回请求的内容。浏览器可以通过决定何时请求资源以及打开多少个并行连接来安排请求

                                    1.HTTP 协议老的标准是HTTP/1.0,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。即无状态,并且HTTP1的连接无法复用导致每一次请求都会经历三次握手和四次挥手

                                    `,15),s=[i];function n(c,o,h,p,d,T){return t(),a("div",null,s)}const C=e(l,[["render",n]]);export{x as __pageData,C as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.lean.js" similarity index 91% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.lean.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.lean.js" index bda832b..45b9064 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.64d68544.lean.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_HTTP_HTTP\347\232\204\344\274\230\345\205\210\347\272\247.md.58b8cfa0.lean.js" @@ -1 +1 @@ -import{_ as e,c as a,o as t,a as r}from"./app.3e0f3fbc.js";const x=JSON.parse('{"title":"强缓存","description":"","frontmatter":{},"headers":[{"level":2,"title":"Expires","slug":"expires","link":"#expires","children":[]},{"level":2,"title":"Cache-Control","slug":"cache-control","link":"#cache-control","children":[]},{"level":2,"title":"ETag","slug":"etag","link":"#etag","children":[]},{"level":2,"title":"对比HTTP1.x","slug":"对比http1-x","link":"#对比http1-x","children":[]}],"relativePath":"面试/前端/HTTP/HTTP的优先级.md"}'),l={name:"面试/前端/HTTP/HTTP的优先级.md"},i=r("",15),s=[i];function n(c,o,h,p,d,T){return t(),a("div",null,s)}const C=e(l,[["render",n]]);export{x as __pageData,C as default}; +import{_ as e,c as a,o as t,a as r}from"./app.ec03d301.js";const x=JSON.parse('{"title":"强缓存","description":"","frontmatter":{},"headers":[{"level":2,"title":"Expires","slug":"expires","link":"#expires","children":[]},{"level":2,"title":"Cache-Control","slug":"cache-control","link":"#cache-control","children":[]},{"level":2,"title":"ETag","slug":"etag","link":"#etag","children":[]},{"level":2,"title":"对比HTTP1.x","slug":"对比http1-x","link":"#对比http1-x","children":[]}],"relativePath":"面试/前端/HTTP/HTTP的优先级.md"}'),l={name:"面试/前端/HTTP/HTTP的优先级.md"},i=r("",15),s=[i];function n(c,o,h,p,d,T){return t(),a("div",null,s)}const C=e(l,[["render",n]]);export{x as __pageData,C as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.js" similarity index 99% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.js" index 02033cd..d871dc1 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const F=JSON.parse('{"title":"flex","description":"","frontmatter":{},"headers":[{"level":2,"title":"设置子容器沿主轴排列:justify-content","slug":"设置子容器沿主轴排列-justify-content","link":"#设置子容器沿主轴排列-justify-content","children":[]},{"level":2,"title":"设置子容器如何沿交叉轴排列:align-items","slug":"设置子容器如何沿交叉轴排列-align-items","link":"#设置子容器如何沿交叉轴排列-align-items","children":[]},{"level":2,"title":"flex-grow属性 flex-shrink","slug":"flex-grow属性-flex-shrink","link":"#flex-grow属性-flex-shrink","children":[]}],"relativePath":"面试/前端/flexandgrid.md"}'),p={name:"面试/前端/flexandgrid.md"},e=l(`

                                    flex

                                    Webkit 内核的浏览器,必须加上-webkit前缀。
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const F=JSON.parse('{"title":"flex","description":"","frontmatter":{},"headers":[{"level":2,"title":"设置子容器沿主轴排列:justify-content","slug":"设置子容器沿主轴排列-justify-content","link":"#设置子容器沿主轴排列-justify-content","children":[]},{"level":2,"title":"设置子容器如何沿交叉轴排列:align-items","slug":"设置子容器如何沿交叉轴排列-align-items","link":"#设置子容器如何沿交叉轴排列-align-items","children":[]},{"level":2,"title":"flex-grow属性 flex-shrink","slug":"flex-grow属性-flex-shrink","link":"#flex-grow属性-flex-shrink","children":[]}],"relativePath":"面试/前端/flexandgrid.md"}'),p={name:"面试/前端/flexandgrid.md"},e=l(`

                                    flex

                                    Webkit 内核的浏览器,必须加上-webkit前缀。
                                     

                                    TIP

                                    flex 的核心的概念就是 容器 和 轴。容器包括外层的 父容器 和内层的 子容器,轴包括 主轴 和 交叉轴

                                    设置子容器沿主轴排列:justify-content

                                    css
                                    flex-start:起始端对齐
                                     flex-end:末尾段对齐
                                     center:居中对齐
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.lean.js"
                                    similarity index 92%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.lean.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.lean.js"
                                    index c5dafe4..e87b08d 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.a3e1013b.lean.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_flexandgrid.md.3e6bf786.lean.js"
                                    @@ -1 +1 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const F=JSON.parse('{"title":"flex","description":"","frontmatter":{},"headers":[{"level":2,"title":"设置子容器沿主轴排列:justify-content","slug":"设置子容器沿主轴排列-justify-content","link":"#设置子容器沿主轴排列-justify-content","children":[]},{"level":2,"title":"设置子容器如何沿交叉轴排列:align-items","slug":"设置子容器如何沿交叉轴排列-align-items","link":"#设置子容器如何沿交叉轴排列-align-items","children":[]},{"level":2,"title":"flex-grow属性 flex-shrink","slug":"flex-grow属性-flex-shrink","link":"#flex-grow属性-flex-shrink","children":[]}],"relativePath":"面试/前端/flexandgrid.md"}'),p={name:"面试/前端/flexandgrid.md"},e=l("",21),o=[e];function t(c,r,i,C,y,D){return n(),a("div",null,o)}const A=s(p,[["render",t]]);export{F as __pageData,A as default};
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const F=JSON.parse('{"title":"flex","description":"","frontmatter":{},"headers":[{"level":2,"title":"设置子容器沿主轴排列:justify-content","slug":"设置子容器沿主轴排列-justify-content","link":"#设置子容器沿主轴排列-justify-content","children":[]},{"level":2,"title":"设置子容器如何沿交叉轴排列:align-items","slug":"设置子容器如何沿交叉轴排列-align-items","link":"#设置子容器如何沿交叉轴排列-align-items","children":[]},{"level":2,"title":"flex-grow属性 flex-shrink","slug":"flex-grow属性-flex-shrink","link":"#flex-grow属性-flex-shrink","children":[]}],"relativePath":"面试/前端/flexandgrid.md"}'),p={name:"面试/前端/flexandgrid.md"},e=l("",21),o=[e];function t(c,r,i,C,y,D){return n(),a("div",null,o)}const A=s(p,[["render",t]]);export{F as __pageData,A as default};
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.js"
                                    similarity index 95%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.js"
                                    index 4e9e9ba..e15f89f 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.js"
                                    @@ -1 +1 @@
                                    -import{_ as e,c as a,o as r,a as t}from"./app.3e0f3fbc.js";const f=JSON.parse('{"title":"URL面试题目","description":"","frontmatter":{},"headers":[{"level":2,"title":"DNS域名解析","slug":"dns域名解析","link":"#dns域名解析","children":[]}],"relativePath":"面试/前端/url到页面/总章.md"}'),n={name:"面试/前端/url到页面/总章.md"},s=t('

                                    URL面试题目

                                    面试中有一个高频的面试题就是当输入URL时会发生什么,越详细越好,ok,接下来我们一起来看看

                                    DNS域名解析

                                    在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名(www.baidu.com)找到对应的服务器,而是要通过 IP 地址(220.114.23.56)

                                    1.1 DNS域名解析

                                    按照顺序为浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存

                                    ',6),_=[s];function d(o,c,i,l,h,p){return r(),a("div",null,_)}const m=e(n,[["render",d]]);export{f as __pageData,m as default}; +import{_ as e,c as a,o as r,a as t}from"./app.ec03d301.js";const f=JSON.parse('{"title":"URL面试题目","description":"","frontmatter":{},"headers":[{"level":2,"title":"DNS域名解析","slug":"dns域名解析","link":"#dns域名解析","children":[]}],"relativePath":"面试/前端/url到页面/总章.md"}'),n={name:"面试/前端/url到页面/总章.md"},s=t('

                                    URL面试题目

                                    面试中有一个高频的面试题就是当输入URL时会发生什么,越详细越好,ok,接下来我们一起来看看

                                    DNS域名解析

                                    在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名(www.baidu.com)找到对应的服务器,而是要通过 IP 地址(220.114.23.56)

                                    1.1 DNS域名解析

                                    按照顺序为浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存

                                    ',6),_=[s];function d(o,c,i,l,h,p){return r(),a("div",null,_)}const m=e(n,[["render",d]]);export{f as __pageData,m as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.lean.js" similarity index 87% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.lean.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.lean.js" index 2da0c52..c9f6ecc 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.4c019bf5.lean.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_url\345\210\260\351\241\265\351\235\242_\346\200\273\347\253\240.md.95b7b1b3.lean.js" @@ -1 +1 @@ -import{_ as e,c as a,o as r,a as t}from"./app.3e0f3fbc.js";const f=JSON.parse('{"title":"URL面试题目","description":"","frontmatter":{},"headers":[{"level":2,"title":"DNS域名解析","slug":"dns域名解析","link":"#dns域名解析","children":[]}],"relativePath":"面试/前端/url到页面/总章.md"}'),n={name:"面试/前端/url到页面/总章.md"},s=t("",6),_=[s];function d(o,c,i,l,h,p){return r(),a("div",null,_)}const m=e(n,[["render",d]]);export{f as __pageData,m as default}; +import{_ as e,c as a,o as r,a as t}from"./app.ec03d301.js";const f=JSON.parse('{"title":"URL面试题目","description":"","frontmatter":{},"headers":[{"level":2,"title":"DNS域名解析","slug":"dns域名解析","link":"#dns域名解析","children":[]}],"relativePath":"面试/前端/url到页面/总章.md"}'),n={name:"面试/前端/url到页面/总章.md"},s=t("",6),_=[s];function d(o,c,i,l,h,p){return r(),a("div",null,_)}const m=e(n,[["render",d]]);export{f as __pageData,m as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.js" similarity index 98% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.js" index fbff451..9080a21 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,a as o}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"EventLoop","description":"","frontmatter":{},"headers":[],"relativePath":"面试/前端/事件/事件循环.md"}'),l={name:"面试/前端/事件/事件循环.md"},p=o(`

                                    EventLoop

                                    宏任务(MacroTask):

                                    setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

                                    MicroTask(微任务)

                                    Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

                                    Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行

                                    js
                                    const promise = new Promise((resolve, reject) => {
                                    +import{_ as s,c as n,o as a,a as o}from"./app.ec03d301.js";const i=JSON.parse('{"title":"EventLoop","description":"","frontmatter":{},"headers":[],"relativePath":"面试/前端/事件/事件循环.md"}'),l={name:"面试/前端/事件/事件循环.md"},p=o(`

                                    EventLoop

                                    宏任务(MacroTask):

                                    setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

                                    MicroTask(微任务)

                                    Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

                                    Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行

                                    js
                                    const promise = new Promise((resolve, reject) => {
                                       console.log(1);
                                       setTimeout(() => {
                                         console.log(2);
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.lean.js"
                                    similarity index 83%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.lean.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.lean.js"
                                    index 73b3a37..165af94 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.d19ad4e4.lean.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\345\276\252\347\216\257.md.917a96e7.lean.js"
                                    @@ -1 +1 @@
                                    -import{_ as s,c as n,o as a,a as o}from"./app.3e0f3fbc.js";const i=JSON.parse('{"title":"EventLoop","description":"","frontmatter":{},"headers":[],"relativePath":"面试/前端/事件/事件循环.md"}'),l={name:"面试/前端/事件/事件循环.md"},p=o("",7),e=[p];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const _=s(l,[["render",t]]);export{i as __pageData,_ as default};
                                    +import{_ as s,c as n,o as a,a as o}from"./app.ec03d301.js";const i=JSON.parse('{"title":"EventLoop","description":"","frontmatter":{},"headers":[],"relativePath":"面试/前端/事件/事件循环.md"}'),l={name:"面试/前端/事件/事件循环.md"},p=o("",7),e=[p];function t(c,r,F,y,D,A){return a(),n("div",null,e)}const _=s(l,[["render",t]]);export{i as __pageData,_ as default};
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.js"
                                    similarity index 98%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.js"
                                    index cc4c599..b7c5afc 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.js"
                                    @@ -1,4 +1,4 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"事件代理和事件委托","slug":"事件代理和事件委托","link":"#事件代理和事件委托","children":[]}],"relativePath":"面试/前端/事件/事件机制.md"}'),p={name:"面试/前端/事件/事件机制.md"},o=l(`

                                    事件捕获阶段 处于目标阶段 事件冒泡阶段

                                    TIP

                                    JS代码只能执行捕获或者冒泡其中的一个阶段 onclick 和 attachEvent 只能得到冒泡阶段 addEventListener (type, listener[, useCapture]) 第三个参数如果是true,表示在事件捕获阶段调用事件处理程序;如果是false(不写默认就是false),表示在事件冒泡阶段电泳事件处理程序。 在实际开发中,我们很少使用事件捕获(低版本ie不兼容),我们更关注事件冒泡 有些事件是没有冒泡的,比如onblur、onfocus、onmouseover、onmouseleave

                                    this返回的是绑定事件的DOM元素,e.target返回的是触发事件的对象

                                    事件代理和事件委托

                                    冒泡阶段 this是可以变化的,但event.target不会变化

                                    target 属性指向的是事件目标,而 currentTarget 属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而 target 指向的可能不是定义时的事件目标。

                                    html
                                        <div id="HUAIGU">
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"事件代理和事件委托","slug":"事件代理和事件委托","link":"#事件代理和事件委托","children":[]}],"relativePath":"面试/前端/事件/事件机制.md"}'),p={name:"面试/前端/事件/事件机制.md"},o=l(`

                                    事件捕获阶段 处于目标阶段 事件冒泡阶段

                                    TIP

                                    JS代码只能执行捕获或者冒泡其中的一个阶段 onclick 和 attachEvent 只能得到冒泡阶段 addEventListener (type, listener[, useCapture]) 第三个参数如果是true,表示在事件捕获阶段调用事件处理程序;如果是false(不写默认就是false),表示在事件冒泡阶段电泳事件处理程序。 在实际开发中,我们很少使用事件捕获(低版本ie不兼容),我们更关注事件冒泡 有些事件是没有冒泡的,比如onblur、onfocus、onmouseover、onmouseleave

                                    this返回的是绑定事件的DOM元素,e.target返回的是触发事件的对象

                                    事件代理和事件委托

                                    冒泡阶段 this是可以变化的,但event.target不会变化

                                    target 属性指向的是事件目标,而 currentTarget 属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而 target 指向的可能不是定义时的事件目标。

                                    html
                                        <div id="HUAIGU">
                                             <div>
                                                 dom1
                                             </div>
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.lean.js"
                                    similarity index 87%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.lean.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.lean.js"
                                    index 91c1bde..1390b9a 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5be83e7.lean.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\344\272\213\344\273\266_\344\272\213\344\273\266\346\234\272\345\210\266.md.d5f3c76e.lean.js"
                                    @@ -1 +1 @@
                                    -import{_ as s,c as a,o as n,a as l}from"./app.3e0f3fbc.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"事件代理和事件委托","slug":"事件代理和事件委托","link":"#事件代理和事件委托","children":[]}],"relativePath":"面试/前端/事件/事件机制.md"}'),p={name:"面试/前端/事件/事件机制.md"},o=l("",8),t=[o];function e(c,r,D,F,y,i){return n(),a("div",null,t)}const d=s(p,[["render",e]]);export{C as __pageData,d as default};
                                    +import{_ as s,c as a,o as n,a as l}from"./app.ec03d301.js";const C=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":3,"title":"事件代理和事件委托","slug":"事件代理和事件委托","link":"#事件代理和事件委托","children":[]}],"relativePath":"面试/前端/事件/事件机制.md"}'),p={name:"面试/前端/事件/事件机制.md"},o=l("",8),t=[o];function e(c,r,D,F,y,i){return n(),a("div",null,t)}const d=s(p,[["render",e]]);export{C as __pageData,d as default};
                                    diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.js"
                                    similarity index 98%
                                    rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.js"
                                    rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.js"
                                    index b41a79f..a063bf6 100644
                                    --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.js"
                                    +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.js"
                                    @@ -1 +1 @@
                                    -import{_ as e,c as o,o as s,a as i}from"./app.3e0f3fbc.js";const g=JSON.parse('{"title":"cookie 大小(4KB)","description":"","frontmatter":{},"headers":[{"level":2,"title":"cookie 数量","slug":"cookie-数量","link":"#cookie-数量","children":[]},{"level":2,"title":"cookie 设置","slug":"cookie-设置","link":"#cookie-设置","children":[]},{"level":2,"title":"localstorage and SessionStorage(5101KB)","slug":"localstorage-and-sessionstorage-5101kb","link":"#localstorage-and-sessionstorage-5101kb","children":[]}],"relativePath":"面试/前端/客户端存储.md"}'),a={name:"面试/前端/客户端存储.md"},t=i('

                                    cookie 大小(4KB)

                                    当服务器收到 HTTP 请求时,服务器可以在响应头里设置一个 Set-cookie 选项,浏览器接收到响应后会自动保存下 Cookie,之后浏览器对该服务器的每一次请求中都会通过请求头把 Cookie 信息发送给服务器。通过以下 node 版本代码案例(通过 req.cookie 设置 cookie,而不是设置请求头的 Set-cookie字段)当请求了 '/' 路径 Cookie 就会保存如下图信息。后面请求其他 path (如:/login)时在以下代码中都能通过 'req.headers.cookie' 打印出请求携带的 Cookie 信息(即为浏览器保存的 Cookie)。

                                    Cookie是保存在客户端磁盘上的,所以不宜占据太多磁盘空间。同时,Cookie是绑定在特定域名上的。当设定了一个Cookie之后,再给创建它的域名发一个请求时,还会包含该Cookie。所以对Cookie的限制是对每个域来说的。但各个浏览器也有不同: IE6及以下每个域名最多包含20个Cookie; IE7及以上每个域名最多50个Cookie; Firefox每个域名最多50个Cookie; Opera下每个域名最多30个Cookie; Sarafi和Chrome对每个域的Cookie数目没有严格限制。

                                    1.过期时间设置(Expires 字段) 2.设置域(domain),指定 cookie 在哪个域下可以被接受 3.设置路径(path),指定 cookie 在当前主机下哪些路径可以接受 Cookie 4.设置不能通过 javascript 访问 Cookie。(HttpOnly字段) 5.设置一段时间过期。(Max-Age) 6.设置 secure 字段 7.设置 someSite ,它有三个可选值 None、strict、Lax

                                    session

                                    session是一种服务度机制,类似散列表结构来存储用户数据 浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid sessionid唯一标识这个session 服务器响应时把sessionid发送给浏览器 浏览器第二次向服务器发送请求时就会携带这个sessionid 服务器通过这个id找到对应的session获取用户数据

                                    TIP

                                    session保存在服务器,cookie保存在客户端 session中保存的时对象,cookie保存的是字符串 session不能区分路径,同一个用户访问一个网站期间,所有的session在任何一个地方都可以访问 cookie如果设置路径,则在某些地方不能访问 session需要借助cookie才能正常工作,如果禁用cookie,session则失效 客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器

                                    localstorage and SessionStorage(5101KB)

                                    失效时间 sessionStorage的失效时间为当前会话是否被关闭, 如果当前会话中存储有key和value,会话关闭数据则消失,所以我们可以得到结论,sessionStorage的失效取决于会话 localStorage的失效时间为用户手动删除,相比sessionStorage的

                                    ',11),c=[t];function n(r,k,d,l,h,p){return s(),o("div",null,c)}const C=e(a,[["render",n]]);export{g as __pageData,C as default}; +import{_ as e,c as o,o as s,a as i}from"./app.ec03d301.js";const g=JSON.parse('{"title":"cookie 大小(4KB)","description":"","frontmatter":{},"headers":[{"level":2,"title":"cookie 数量","slug":"cookie-数量","link":"#cookie-数量","children":[]},{"level":2,"title":"cookie 设置","slug":"cookie-设置","link":"#cookie-设置","children":[]},{"level":2,"title":"localstorage and SessionStorage(5101KB)","slug":"localstorage-and-sessionstorage-5101kb","link":"#localstorage-and-sessionstorage-5101kb","children":[]}],"relativePath":"面试/前端/客户端存储.md"}'),a={name:"面试/前端/客户端存储.md"},t=i('

                                    cookie 大小(4KB)

                                    当服务器收到 HTTP 请求时,服务器可以在响应头里设置一个 Set-cookie 选项,浏览器接收到响应后会自动保存下 Cookie,之后浏览器对该服务器的每一次请求中都会通过请求头把 Cookie 信息发送给服务器。通过以下 node 版本代码案例(通过 req.cookie 设置 cookie,而不是设置请求头的 Set-cookie字段)当请求了 '/' 路径 Cookie 就会保存如下图信息。后面请求其他 path (如:/login)时在以下代码中都能通过 'req.headers.cookie' 打印出请求携带的 Cookie 信息(即为浏览器保存的 Cookie)。

                                    Cookie是保存在客户端磁盘上的,所以不宜占据太多磁盘空间。同时,Cookie是绑定在特定域名上的。当设定了一个Cookie之后,再给创建它的域名发一个请求时,还会包含该Cookie。所以对Cookie的限制是对每个域来说的。但各个浏览器也有不同: IE6及以下每个域名最多包含20个Cookie; IE7及以上每个域名最多50个Cookie; Firefox每个域名最多50个Cookie; Opera下每个域名最多30个Cookie; Sarafi和Chrome对每个域的Cookie数目没有严格限制。

                                    1.过期时间设置(Expires 字段) 2.设置域(domain),指定 cookie 在哪个域下可以被接受 3.设置路径(path),指定 cookie 在当前主机下哪些路径可以接受 Cookie 4.设置不能通过 javascript 访问 Cookie。(HttpOnly字段) 5.设置一段时间过期。(Max-Age) 6.设置 secure 字段 7.设置 someSite ,它有三个可选值 None、strict、Lax

                                    session

                                    session是一种服务度机制,类似散列表结构来存储用户数据 浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid sessionid唯一标识这个session 服务器响应时把sessionid发送给浏览器 浏览器第二次向服务器发送请求时就会携带这个sessionid 服务器通过这个id找到对应的session获取用户数据

                                    TIP

                                    session保存在服务器,cookie保存在客户端 session中保存的时对象,cookie保存的是字符串 session不能区分路径,同一个用户访问一个网站期间,所有的session在任何一个地方都可以访问 cookie如果设置路径,则在某些地方不能访问 session需要借助cookie才能正常工作,如果禁用cookie,session则失效 客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器

                                    localstorage and SessionStorage(5101KB)

                                    失效时间 sessionStorage的失效时间为当前会话是否被关闭, 如果当前会话中存储有key和value,会话关闭数据则消失,所以我们可以得到结论,sessionStorage的失效取决于会话 localStorage的失效时间为用户手动删除,相比sessionStorage的

                                    ',11),c=[t];function n(r,k,d,l,h,p){return s(),o("div",null,c)}const C=e(a,[["render",n]]);export{g as __pageData,C as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.lean.js" similarity index 91% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.lean.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.lean.js" index 9371a15..d62b01e 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.e9a47c51.lean.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.md.35f488d1.lean.js" @@ -1 +1 @@ -import{_ as e,c as o,o as s,a as i}from"./app.3e0f3fbc.js";const g=JSON.parse('{"title":"cookie 大小(4KB)","description":"","frontmatter":{},"headers":[{"level":2,"title":"cookie 数量","slug":"cookie-数量","link":"#cookie-数量","children":[]},{"level":2,"title":"cookie 设置","slug":"cookie-设置","link":"#cookie-设置","children":[]},{"level":2,"title":"localstorage and SessionStorage(5101KB)","slug":"localstorage-and-sessionstorage-5101kb","link":"#localstorage-and-sessionstorage-5101kb","children":[]}],"relativePath":"面试/前端/客户端存储.md"}'),a={name:"面试/前端/客户端存储.md"},t=i("",11),c=[t];function n(r,k,d,l,h,p){return s(),o("div",null,c)}const C=e(a,[["render",n]]);export{g as __pageData,C as default}; +import{_ as e,c as o,o as s,a as i}from"./app.ec03d301.js";const g=JSON.parse('{"title":"cookie 大小(4KB)","description":"","frontmatter":{},"headers":[{"level":2,"title":"cookie 数量","slug":"cookie-数量","link":"#cookie-数量","children":[]},{"level":2,"title":"cookie 设置","slug":"cookie-设置","link":"#cookie-设置","children":[]},{"level":2,"title":"localstorage and SessionStorage(5101KB)","slug":"localstorage-and-sessionstorage-5101kb","link":"#localstorage-and-sessionstorage-5101kb","children":[]}],"relativePath":"面试/前端/客户端存储.md"}'),a={name:"面试/前端/客户端存储.md"},t=i("",11),c=[t];function n(r,k,d,l,h,p){return s(),o("div",null,c)}const C=e(a,[["render",n]]);export{g as __pageData,C as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.js" similarity index 97% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.js" index 2813348..41b1adc 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.js" @@ -1 +1 @@ -import{_ as e,c as r,o as s,a as i}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"跨域","slug":"跨域","link":"#跨域","children":[]},{"level":2,"title":"jsonp","slug":"jsonp","link":"#jsonp","children":[]},{"level":2,"title":"CORS(Cross-Origin Resource Sharing),跨域资源共享","slug":"cors-cross-origin-resource-sharing-跨域资源共享","link":"#cors-cross-origin-resource-sharing-跨域资源共享","children":[]},{"level":2,"title":"代理跨域请求(Nginx)","slug":"代理跨域请求-nginx","link":"#代理跨域请求-nginx","children":[]},{"level":2,"title":"基于websocket","slug":"基于websocket","link":"#基于websocket","children":[]}],"relativePath":"面试/前端/跨域.md"}'),n={name:"面试/前端/跨域.md"},o=i('

                                    跨域

                                    跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的

                                    解决方案如下

                                    jsonp

                                    利用了 script 不受同源策略的限制

                                    缺点:只能 get 方式,易受到 XSS攻击

                                    CORS(Cross-Origin Resource Sharing),跨域资源共享

                                    当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;

                                    后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;

                                    浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错

                                    缺点:忽略 cookie,浏览器版本有一定要求

                                    代理跨域请求(Nginx)

                                    前端向发送请求,经过代理,请求需要的服务器资源

                                    缺点:需要额外的代理服务器

                                    基于websocket

                                    websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求

                                    缺点:浏览器一定版本要求,服务器需要支持 websocket 协议

                                    ',17),a=[o];function t(c,l,h,p,d,_){return s(),r("div",null,a)}const k=e(n,[["render",t]]);export{u as __pageData,k as default}; +import{_ as e,c as r,o as s,a as i}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"跨域","slug":"跨域","link":"#跨域","children":[]},{"level":2,"title":"jsonp","slug":"jsonp","link":"#jsonp","children":[]},{"level":2,"title":"CORS(Cross-Origin Resource Sharing),跨域资源共享","slug":"cors-cross-origin-resource-sharing-跨域资源共享","link":"#cors-cross-origin-resource-sharing-跨域资源共享","children":[]},{"level":2,"title":"代理跨域请求(Nginx)","slug":"代理跨域请求-nginx","link":"#代理跨域请求-nginx","children":[]},{"level":2,"title":"基于websocket","slug":"基于websocket","link":"#基于websocket","children":[]}],"relativePath":"面试/前端/跨域.md"}'),n={name:"面试/前端/跨域.md"},o=i('

                                    跨域

                                    跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的

                                    解决方案如下

                                    jsonp

                                    利用了 script 不受同源策略的限制

                                    缺点:只能 get 方式,易受到 XSS攻击

                                    CORS(Cross-Origin Resource Sharing),跨域资源共享

                                    当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;

                                    后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;

                                    浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错

                                    缺点:忽略 cookie,浏览器版本有一定要求

                                    代理跨域请求(Nginx)

                                    前端向发送请求,经过代理,请求需要的服务器资源

                                    缺点:需要额外的代理服务器

                                    基于websocket

                                    websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求

                                    缺点:浏览器一定版本要求,服务器需要支持 websocket 协议

                                    ',17),a=[o];function t(c,l,h,p,d,_){return s(),r("div",null,a)}const k=e(n,[["render",t]]);export{u as __pageData,k as default}; diff --git "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.lean.js" "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.lean.js" similarity index 93% rename from "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.lean.js" rename to "assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.lean.js" index f3d4121..65fbf48 100644 --- "a/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.6a5db150.lean.js" +++ "b/assets/\351\235\242\350\257\225_\345\211\215\347\253\257_\350\267\250\345\237\237.md.255c97e5.lean.js" @@ -1 +1 @@ -import{_ as e,c as r,o as s,a as i}from"./app.3e0f3fbc.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"跨域","slug":"跨域","link":"#跨域","children":[]},{"level":2,"title":"jsonp","slug":"jsonp","link":"#jsonp","children":[]},{"level":2,"title":"CORS(Cross-Origin Resource Sharing),跨域资源共享","slug":"cors-cross-origin-resource-sharing-跨域资源共享","link":"#cors-cross-origin-resource-sharing-跨域资源共享","children":[]},{"level":2,"title":"代理跨域请求(Nginx)","slug":"代理跨域请求-nginx","link":"#代理跨域请求-nginx","children":[]},{"level":2,"title":"基于websocket","slug":"基于websocket","link":"#基于websocket","children":[]}],"relativePath":"面试/前端/跨域.md"}'),n={name:"面试/前端/跨域.md"},o=i("",17),a=[o];function t(c,l,h,p,d,_){return s(),r("div",null,a)}const k=e(n,[["render",t]]);export{u as __pageData,k as default}; +import{_ as e,c as r,o as s,a as i}from"./app.ec03d301.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[{"level":2,"title":"跨域","slug":"跨域","link":"#跨域","children":[]},{"level":2,"title":"jsonp","slug":"jsonp","link":"#jsonp","children":[]},{"level":2,"title":"CORS(Cross-Origin Resource Sharing),跨域资源共享","slug":"cors-cross-origin-resource-sharing-跨域资源共享","link":"#cors-cross-origin-resource-sharing-跨域资源共享","children":[]},{"level":2,"title":"代理跨域请求(Nginx)","slug":"代理跨域请求-nginx","link":"#代理跨域请求-nginx","children":[]},{"level":2,"title":"基于websocket","slug":"基于websocket","link":"#基于websocket","children":[]}],"relativePath":"面试/前端/跨域.md"}'),n={name:"面试/前端/跨域.md"},o=i("",17),a=[o];function t(c,l,h,p,d,_){return s(),r("div",null,a)}const k=e(n,[["render",t]]);export{u as __pageData,k as default}; diff --git a/hashmap.json b/hashmap.json index ef08e01..90888f7 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"js.ts_es6_运算符.md":"0555d365","js.ts_es6_iterator.md":"1c76fe5e","js.ts_js上下文和执行栈.md":"b55cc06e","js.ts_es6_promise.md":"1d63510c","js.ts_ts_is.md":"454e2256","js.ts_基础_eventloop.md":"2bedcbfb","js.ts_基础_new操作符.md":"bfd6f736","js.ts_基础_一文搞懂map函数.md":"517438c8","面试_cz前端_html_css.md":"22403196","react_reacthooks_usestate.md":"1ac2cd38","计算机基础_git_git设置两个ssh密钥.md":"3f15d8c1","js.ts_ts_索引.md":"18373771","vue_组件通信_api-props.md":"63359098","面试_前端_客户端存储.md":"e9a47c51","tips_2023.3.5.md":"38a1bfd0","面试_前端_http_http的优先级.md":"64d68544","react_reacthooks_usecontext.md":"5c073e00","开发总结_github-deploy.md":"db63c2d9","面试_cz前端_js基础_异步.md":"7d03057e","react_reacthooks_useref.md":"7892ba92","react_reacthooks_useeffect.md":"f1bef51f","面试_前端_事件_事件循环.md":"d19ad4e4","面试_noni_js_js基础_数组原生方法.md":"e14135a0","vue_源码分析_vnode与diff算法.md":"6847b478","计算机基础_git_场景及解决方案_开发新功能.md":"7175aa69","计算机基础_git_命令_常用.md":"67efdb60","面试_noni_vue_v-if和v-for同时使用问题.md":"8897125f","算法_二叉树_层序遍历.md":"cfda8bdd","js.ts_基础_js中的map和weakmap.md":"a9045063","面试_cz前端_js基础_原型和原型链.md":"25d2f4d7","开发总结_常用的库_css.md":"5e220525","js.ts_es6_index.md":"4ce42092","react_redux.md":"a7cc0ec6","计算机基础_git_index.md":"472823ad","vue_css_scroll.md":"42176bcb","vue_组件通信_api-attrs.md":"ff5d9ade","react_index.md":"1ce8f0d9","计算机基础_git_git规范.md":"a5d5c677","计算机基础_git_命令_init.md":"7e49cf97","js.ts_基础_垃圾回收.md":"2e60c866","vue_组件通信_api-parent.md":"9f3dbee6","面试_noni_js_js基础_dom和bom.md":"63677668","面试_cz前端_js基础_作用域和闭包.md":"1ce14272","面试_前端_跨域.md":"6a5db150","计算机基础_git_命令_merge.md":"c7f4790b","react_reacthooks_usecallback.md":"1c584b49","js.ts_es6_symbol.md":"7d12d370","面试_前端_事件_事件机制.md":"d5be83e7","计算机基础_git_场景及解决方案_紧急bug.md":"d0e3a2dc","js.ts_es6_解构赋值.md":"2ad69e4a","算法_面试算法题_1.7字节.md":"aee69b51","面试_noni_js_js基础_new操作符实现原理.md":"1a272ca6","计算机基础_git_tips.md":"e0872371","开发总结_adobe-pr插件.md":"e485d796","开发总结_canvas_canvas.md":"6c7d4746","面试_前端_flexandgrid.md":"a3e1013b","面试_前端_url到页面_总章.md":"4c019bf5","计算机基础_git_场景及解决方案_发版.md":"e27f2008","算法_面试算法题_1.15七牛云春招笔试题.md":"b0eac2d8","vue_组件通信_api-provide.md":"064caa0b","面试_cz前端_js基础_变量类型和计算.md":"40d0a56b","计算机基础_index.md":"8d64b9be","计算机基础_http.md":"fad6f275","js.ts_设计模式_发布订阅模式.md":"eefd5042","index.md":"9a7f58ba","开发总结_v-for和v-if.md":"bfe8d707"} +{"react_reacthooks_usecontext.md":"df92c0c5","js.ts_es6_解构赋值.md":"31960747","js.ts_es6_index.md":"691bf43d","js.ts_js上下文和执行栈.md":"401ce3f9","js.ts_es6_运算符.md":"6a0dea18","js.ts_es6_promise.md":"ce64363c","js.ts_基础_一文搞懂map函数.md":"2eb385c8","js.ts_es6_symbol.md":"50dec9c7","js.ts_es6_iterator.md":"f3fca7d1","react_index.md":"aef465cd","js.ts_基础_垃圾回收.md":"87bf0130","js.ts_ts_索引.md":"6a7434e5","js.ts_基础_js中的map和weakmap.md":"bed29ac7","react_reacthooks_useeffect.md":"7227bbed","react_reacthooks_usecallback.md":"d5247b8b","js.ts_基础_new操作符.md":"c29bc184","react_reacthooks_usestate.md":"ed1ad237","react_reacthooks_useref.md":"ad056e1f","js.ts_基础_eventloop.md":"5f45abd4","js.ts_ts_is.md":"3088178b","react_redux.md":"786f58cd","js.ts_设计模式_发布订阅模式.md":"47d4ba6b","算法_面试算法题_1.7字节.md":"8afed0a6","vue_源码分析_vnode与diff算法.md":"45840d87","tips_2023.3.5.md":"2dbdb9f3","index.md":"624b3696","算法_面试算法题_1.15七牛云春招笔试题.md":"475ddde7","vue_组件通信_api-attrs.md":"f1a7c08c","开发总结_canvas_canvas.md":"ebb83c7c","vue_组件通信_api-provide.md":"687988b1","计算机基础_http.md":"b7c09e53","vue_css_scroll.md":"1ed7720c","开发总结_v-for和v-if.md":"0993cf0a","vue_组件通信_api-parent.md":"1745ecf3","开发总结_adobe-pr插件.md":"03ac7388","计算机基础_git_git设置两个ssh密钥.md":"d3256fac","面试_cz前端_html_css.md":"54b3e357","算法_二叉树_层序遍历.md":"ee74ccc4","面试_前端_客户端存储.md":"35f488d1","面试_前端_url到页面_总章.md":"95b7b1b3","面试_前端_事件_事件循环.md":"917a96e7","面试_前端_事件_事件机制.md":"d5f3c76e","面试_noni_vue_v-if和v-for同时使用问题.md":"11bafd55","开发总结_github-deploy.md":"370d6a40","面试_cz前端_js基础_异步.md":"1f21a706","计算机基础_index.md":"c01f4f9b","计算机基础_git_命令_常用.md":"3e6fcac7","vue_组件通信_api-props.md":"ae661645","计算机基础_git_命令_merge.md":"d452a38c","计算机基础_git_命令_init.md":"6f76688d","计算机基础_git_场景及解决方案_紧急bug.md":"60e046a3","计算机基础_git_场景及解决方案_发版.md":"a000055b","计算机基础_git_index.md":"b79aa9c1","计算机基础_git_场景及解决方案_开发新功能.md":"f6f93872","计算机基础_git_tips.md":"8d63ed5a","计算机基础_git_git规范.md":"6639eca7","面试_前端_跨域.md":"255c97e5","开发总结_常用的库_css.md":"c1c80c14","面试_cz前端_js基础_变量类型和计算.md":"23efe413","面试_cz前端_js基础_作用域和闭包.md":"b41c716d","面试_noni_js_js基础_手写call.md":"e99ab99f","面试_cz前端_js基础_原型和原型链.md":"26402d30","面试_前端_http_http的优先级.md":"58b8cfa0","面试_noni_js_js基础_dom和bom.md":"08038994","面试_noni_js_js基础_new操作符实现原理.md":"34fe56c4","面试_noni_js_js基础_数组原生方法.md":"a422a38c","面试_前端_flexandgrid.md":"3e6bf786"} diff --git a/index.html b/index.html index faa6c75..96b3ae7 100644 --- a/index.html +++ b/index.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - + + \ No newline at end of file diff --git a/tips/2023.3.5.html b/tips/2023.3.5.html index 92eeb77..14ddbfd 100644 --- a/tips/2023.3.5.html +++ b/tips/2023.3.5.html @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    reg.source

                                    js
                                    var regex = /fooBar/ig;
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\345\274\200\345\217\221\346\200\273\347\273\223/Adobe-pr\346\217\222\344\273\266.html" "b/\345\274\200\345\217\221\346\200\273\347\273\223/Adobe-pr\346\217\222\344\273\266.html"
                                    index 0023392..fbf5190 100644
                                    --- "a/\345\274\200\345\217\221\346\200\273\347\273\223/Adobe-pr\346\217\222\344\273\266.html"
                                    +++ "b/\345\274\200\345\217\221\346\200\273\347\273\223/Adobe-pr\346\217\222\344\273\266.html"
                                    @@ -6,8 +6,8 @@
                                         基于vue开发Adobe插件 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    基于vue开发Adobe插件

                                    /CSXS 主要在该目录下建一个 mainifest.xml 的配置文件

                                    /client 主要包含前端界面资源,包括 Adobe CSInterface.js 等第三方库

                                    /jsx 主要包含 ExtendScript 后台运行文件

                                    /js 主要包含前端的渲染以及交互脚本

                                    DANGER

                                    在html进行跳转(端口为vue项目启动端口即可)

                                    WARNING

                                    本着不重复造轮子的原则,在这里我会以kuaizi团队开发的cep依赖为主

                                    kuaizi--cep

                                    通过软链映射进行热更新

                                    js
                                    fs.symlinkSync()
                                    +    
                                    Skip to content
                                    On this page

                                    基于vue开发Adobe插件

                                    /CSXS 主要在该目录下建一个 mainifest.xml 的配置文件

                                    /client 主要包含前端界面资源,包括 Adobe CSInterface.js 等第三方库

                                    /jsx 主要包含 ExtendScript 后台运行文件

                                    /js 主要包含前端的渲染以及交互脚本

                                    DANGER

                                    在html进行跳转(端口为vue项目启动端口即可)

                                    WARNING

                                    本着不重复造轮子的原则,在这里我会以kuaizi团队开发的cep依赖为主

                                    kuaizi--cep

                                    通过软链映射进行热更新

                                    js
                                    fs.symlinkSync()
                                     

                                    初始模板渲染

                                    alt

                                    引入该依赖
                                    js
                                    npm install @kuaizi/vue-cli-plugin-cep
                                     

                                    引入后运行时会创建软链(即快捷方式) mainfest.xml可以自动生成,也可以自己配置相关信息 以下为参考配置

                                    js
                                    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
                                     <ExtensionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ExtensionBundleId="com.xxx" ExtensionBundleName="xxx" ExtensionBundleVersion="1.0.0" Version="4.0">
                                    @@ -75,8 +75,8 @@
                                     	</DispatchInfoList>
                                     </ExtensionManifest>
                                     

                                    打包安装有机会再进行更新

                                    此处占位

                                    ELES?

                                    🌞事实上UXP可能更为友好,这里不再赘述

                                    🌞jsx操作CEP的API可能正是你需要的

                                    🌞感谢大家的分享以及相关依赖的开发🌟🌟🌟🌟

                                    - - + + \ No newline at end of file diff --git "a/\345\274\200\345\217\221\346\200\273\347\273\223/canvas/canvas.html" "b/\345\274\200\345\217\221\346\200\273\347\273\223/canvas/canvas.html" index 0b30e3d..ba59336 100644 --- "a/\345\274\200\345\217\221\346\200\273\347\273\223/canvas/canvas.html" +++ "b/\345\274\200\345\217\221\346\200\273\347\273\223/canvas/canvas.html" @@ -6,8 +6,8 @@ canvas框架实现的基本操作以及源码解析(konvajs) | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    canvas框架实现的基本操作以及源码解析(konvajs)

                                    新建Stage类

                                    js
                                    var stage = new Konva.Stage({
                                    +    
                                    Skip to content
                                    On this page

                                    canvas框架实现的基本操作以及源码解析(konvajs)

                                    新建Stage类

                                    js
                                    var stage = new Konva.Stage({
                                       container: 'container',   // id of container <div> *包裹舞台的DIV元素的ID
                                       width: 500,
                                       height: 500
                                    @@ -38,8 +38,8 @@
                                           height: this.height(),
                                         });
                                     
                                    - - + + \ No newline at end of file diff --git "a/\345\274\200\345\217\221\346\200\273\347\273\223/github-deploy.html" "b/\345\274\200\345\217\221\346\200\273\347\273\223/github-deploy.html" index 71cb8e7..0fe91a4 100644 --- "a/\345\274\200\345\217\221\346\200\273\347\273\223/github-deploy.html" +++ "b/\345\274\200\345\217\221\346\200\273\347\273\223/github-deploy.html" @@ -6,8 +6,8 @@ github deploy | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git "a/\345\274\200\345\217\221\346\200\273\347\273\223/v-for\345\222\214v-if.html" "b/\345\274\200\345\217\221\346\200\273\347\273\223/v-for\345\222\214v-if.html" index f16cc26..e33ac47 100644 --- "a/\345\274\200\345\217\221\346\200\273\347\273\223/v-for\345\222\214v-if.html" +++ "b/\345\274\200\345\217\221\346\200\273\347\273\223/v-for\345\222\214v-if.html" @@ -6,8 +6,8 @@ 事故地点 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    v-for v-if

                                    今天有个憨憨用了v-for 和v-if 出现bug了,特此记录一下

                                    v-for

                                    首先我们要对v-for 有一定的了解

                                    js
                                    v-for="(item,index) in DataList"
                                    +    
                                    Skip to content
                                    On this page

                                    v-for v-if

                                    今天有个憨憨用了v-for 和v-if 出现bug了,特此记录一下

                                    v-for

                                    首先我们要对v-for 有一定的了解

                                    js
                                    v-for="(item,index) in DataList"
                                     // 遍历数组值
                                     

                                    。。。。。。补充明天再说

                                    v-if

                                    与 v-else v-else-if 连用

                                    事故地点

                                    js
                                    
                                     <!DOCTYPE html>
                                    @@ -90,8 +90,8 @@
                                     </script>
                                     
                                     

                                    这样在切换的时候会多次渲染goodlist

                                    原因也很简单

                                    在第一次渲染的时候是正常渲染 v-for 在组件挂载的时候

                                    但是在v-if 执行后会重新渲染但是没有之前的DOM节点 又通过v-for 渲染了一次

                                    第二次渲染可能在update 时(没测试过先这样明天再来)

                                    至于为什么没有销毁大概是没有指令销毁吧 、

                                    - - + + \ No newline at end of file diff --git "a/\345\274\200\345\217\221\346\200\273\347\273\223/\345\270\270\347\224\250\347\232\204\345\272\223/css.html" "b/\345\274\200\345\217\221\346\200\273\347\273\223/\345\270\270\347\224\250\347\232\204\345\272\223/css.html" index 0452cda..d2fde10 100644 --- "a/\345\274\200\345\217\221\346\200\273\347\273\223/\345\270\270\347\224\250\347\232\204\345\272\223/css.html" +++ "b/\345\274\200\345\217\221\346\200\273\347\273\223/\345\270\270\347\224\250\347\232\204\345\272\223/css.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + - - - + + + \ No newline at end of file diff --git "a/\347\256\227\346\263\225/\344\272\214\345\217\211\346\240\221/\345\261\202\345\272\217\351\201\215\345\216\206.html" "b/\347\256\227\346\263\225/\344\272\214\345\217\211\346\240\221/\345\261\202\345\272\217\351\201\215\345\216\206.html" index 05ad251..be1aa72 100644 --- "a/\347\256\227\346\263\225/\344\272\214\345\217\211\346\240\221/\345\261\202\345\272\217\351\201\215\345\216\206.html" +++ "b/\347\256\227\346\263\225/\344\272\214\345\217\211\346\240\221/\345\261\202\345\272\217\351\201\215\345\216\206.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    LeetCode 从上到下打印二叉树1

                                    alt

                                    😈 利用队列的先进先出很容易办到,遍历每一层的节点

                                    js
                                    var levelOrder = function(root) {
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.html" "b/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.html"
                                    index 6c49a31..2cb659c 100644
                                    --- "a/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.html"
                                    +++ "b/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.15\344\270\203\347\211\233\344\272\221\346\230\245\346\213\233\347\254\224\350\257\225\351\242\230.html"
                                    @@ -6,8 +6,8 @@
                                         怀谷 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    -    
                                    -    
                                    +    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.7\345\255\227\350\212\202.html" "b/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.7\345\255\227\350\212\202.html"
                                    index 56d109e..49fe6fd 100644
                                    --- "a/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.7\345\255\227\350\212\202.html"
                                    +++ "b/\347\256\227\346\263\225/\351\235\242\350\257\225\347\256\227\346\263\225\351\242\230/1.7\345\255\227\350\212\202.html"
                                    @@ -6,8 +6,8 @@
                                         中文数字翻译成阿拉伯数字 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    中文数字翻译成阿拉伯数字

                                    打印全排列

                                    js
                                    function fullpermutate(str) {
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/HTTP.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/HTTP.html"
                                    index 8552867..30be90c 100644
                                    --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/HTTP.html"
                                    +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/HTTP.html"
                                    @@ -6,8 +6,8 @@
                                         HTTP | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    HTTP

                                    version

                                    1. HTTP 0.9

                                    只有一个get , 一次TCP连接只能发送一次HTTP请求

                                    1. HTTP 1.0

                                    增加一些新方法 head post

                                    增加响应状态码, 对可能错误的原因进行标记

                                    引入 HTTP HEADER

                                    HTTP/1.0最核心的改变是增加了头部设定,头部内容以键值对的形式设置。请求头部通过 Accept 字段来告诉服务端可以接收的文件类型,响应头部再通过 Content-Type 字段来告诉浏览器返回文件的类型

                                    1. HTTP 1.1

                                    长连接: 引入TCP 连接复用

                                    引入管道机制 一个TCP连接,可以同时发送多个请求

                                    允许数据分块

                                    1. HTTP 2.0 不再使用ASCII 传输而是使用二进制数据来提升传输效率
                                    - - +
                                    Skip to content
                                    On this page

                                    HTTP

                                    version

                                    1. HTTP 0.9

                                    只有一个get , 一次TCP连接只能发送一次HTTP请求

                                    1. HTTP 1.0

                                    增加一些新方法 head post

                                    增加响应状态码, 对可能错误的原因进行标记

                                    引入 HTTP HEADER

                                    HTTP/1.0最核心的改变是增加了头部设定,头部内容以键值对的形式设置。请求头部通过 Accept 字段来告诉服务端可以接收的文件类型,响应头部再通过 Content-Type 字段来告诉浏览器返回文件的类型

                                    1. HTTP 1.1

                                    长连接: 引入TCP 连接复用

                                    引入管道机制 一个TCP连接,可以同时发送多个请求

                                    允许数据分块

                                    1. HTTP 2.0 不再使用ASCII 传输而是使用二进制数据来提升传输效率
                                    + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\247\204\350\214\203.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\247\204\350\214\203.html" index 0b6bd2e..1e3ad41 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\247\204\350\214\203.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\247\204\350\214\203.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    代码冲突

                                    bash
                                    git merge xxxx_branch 或者 git pull  or
                                    +    
                                    Skip to content
                                    On this page

                                    代码冲突

                                    bash
                                    git merge xxxx_branch 或者 git pull  or
                                     git rebase xxxx_branch 或者 git pull --rebase  
                                     解消方法也是修改冲突文件并删除冲突标识<<<<< ==== >>>:
                                     git rebase –continue //继续更新到最新的base上
                                    @@ -34,8 +34,8 @@
                                     perf:          优化相关,比如提升性能、体验
                                     revert:        回滚到上一个版本	
                                     



                                    -----------------------------------from后端gitlab开发文档规范------------------------------

                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.html" index 351df18..0a17fea 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/git\350\256\276\347\275\256\344\270\244\344\270\252ssh\345\257\206\351\222\245.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    git设置两个ssh密钥

                                    分为公司邮箱和个人邮箱 在ssh设置两个私钥并指定地址和私钥

                                    bash
                                    ssh-keygen -t rsa -C "123456@qq.com"
                                    +    
                                    Skip to content
                                    On this page

                                    git设置两个ssh密钥

                                    分为公司邮箱和个人邮箱 在ssh设置两个私钥并指定地址和私钥

                                    bash
                                    ssh-keygen -t rsa -C "123456@qq.com"
                                     

                                    新建密钥并命名 假如为 gitlab_hyperchain_rsa_id (记得将公钥放进gitlab或者其他git平台)

                                    在C:\Users\ziyuhang.ssh\中新建config文件并配置

                                    如下

                                    md
                                    # 配置github.com
                                     Host github.com                 
                                         HostName github.com
                                    @@ -38,8 +38,8 @@
                                         HostkeyAlgorithms +ssh-rsa
                                         PubkeyAcceptedAlgorithms +ssh-rsa
                                     
                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/index.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/index.html" index a20f5a5..a5dc353 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/index.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/index.html" @@ -6,8 +6,8 @@ git | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    git

                                    远端维护一个存储库,每个人从远端拉取代码 alt

                                    对比svn

                                    git 是分布式的,而svn是集中式的

                                    svn 严重依赖于服务器端 挂了就啥都没了 而git可以从另外的客户端获取所以代码

                                    git config

                                    git 配置分为全局配置和本地配置

                                    即命令行输入用带上 --global

                                    或者在全局配置文件中修改.gitconfig文件

                                    bash
                                    git config --global user.name "your-username"
                                    +    
                                    Skip to content
                                    On this page

                                    git

                                    远端维护一个存储库,每个人从远端拉取代码 alt

                                    对比svn

                                    git 是分布式的,而svn是集中式的

                                    svn 严重依赖于服务器端 挂了就啥都没了 而git可以从另外的客户端获取所以代码

                                    git config

                                    git 配置分为全局配置和本地配置

                                    即命令行输入用带上 --global

                                    或者在全局配置文件中修改.gitconfig文件

                                    bash
                                    git config --global user.name "your-username"
                                     git config --global user.email "your-email-address"
                                     

                                    更多配置点这里

                                    分支的概念

                                    A->B->D (main) A->C (master)

                                    git checkout <分支名字> 切换分支

                                    git merge <分支名字> 将此分支合并在当前分支

                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/tips.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/tips.html" index 9e30d1e..fbb5683 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/tips.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/tips.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    配置别名

                                    展示git提交记录

                                    bash
                                    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/init.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/init.html"
                                    index 68cf62b..595dc5c 100644
                                    --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/init.html"
                                    +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/init.html"
                                    @@ -6,8 +6,8 @@
                                         git init | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    git init

                                    当我们使用 git init 命令会生成一个.git文件夹

                                    .git 文件夹目录结构 目录生成工具********treer

                                    js
                                    ├─COMMIT_EDITMSG
                                    +    
                                    Skip to content
                                    On this page

                                    git init

                                    当我们使用 git init 命令会生成一个.git文件夹

                                    .git 文件夹目录结构 目录生成工具********treer

                                    js
                                    ├─COMMIT_EDITMSG
                                     ├─config //保存配置
                                     ├─description // 对仓库的描述
                                     ├─FETCH_HEAD
                                    @@ -151,8 +151,8 @@
                                     |   ├─push-to-checkout.sample
                                     |   └update.sample
                                     
                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/merge.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/merge.html" index 2a442e8..4aec6ca 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/merge.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/merge.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    merge

                                    当我们想合并某一个分支时可以存在冲突

                                    js
                                    //A分支
                                    +    
                                    Skip to content
                                    On this page

                                    merge

                                    当我们想合并某一个分支时可以存在冲突

                                    js
                                    //A分支
                                     console.log("hello world Branch A")
                                     
                                    js
                                    //B分支
                                     console.log("hello world Branch B")
                                    @@ -27,8 +27,8 @@
                                     A->D->E master
                                     
                                     

                                    fast-forward

                                    如果一个分支的提交历史是另一个分支的子集,那么Git会简单地将当前分支指向另一个分支的最新提交,这样就完成了合并操作

                                    recursive

                                    在recursive合并策略中,Git会创建一个新的提交来表示合并结果,这个提交会包含两个分支的所有变更内容。

                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/\345\270\270\347\224\250.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/\345\270\270\347\224\250.html" index ccd9709..5536fb7 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/\345\270\270\347\224\250.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\221\275\344\273\244/\345\270\270\347\224\250.html" @@ -6,8 +6,8 @@ 常用的可以在这里找到 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    常用的可以在这里找到

                                    git pull

                                    实际上是 git fetch + git merge 如果是--rebase 则为git fetch + git rebase

                                    bash
                                    git pull <远程主机> <远程分支>:<本地分支>
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\217\221\347\211\210.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\217\221\347\211\210.html"
                                    index 3353204..09e0561 100644
                                    --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\217\221\347\211\210.html"
                                    +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\217\221\347\211\210.html"
                                    @@ -6,8 +6,8 @@
                                         发版 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    发版

                                    发版位于 release 分支 修复bug 准备发版,当准备完毕后合并一部分bugfix的分支,再将这个合入master 随后合入dev 准备下一次开发

                                    开整

                                    bash
                                    git checkout dev
                                    +    
                                    Skip to content
                                    On this page

                                    发版

                                    发版位于 release 分支 修复bug 准备发版,当准备完毕后合并一部分bugfix的分支,再将这个合入master 随后合入dev 准备下一次开发

                                    开整

                                    bash
                                    git checkout dev
                                     git merge feature
                                     git merge bugfix
                                     git branch release -b
                                     git push release:release
                                     
                                    - - + + \ No newline at end of file diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.html" index 97aa73b..7a53889 100644 --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.html" +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\345\274\200\345\217\221\346\226\260\345\212\237\350\203\275.html" @@ -6,8 +6,8 @@ 当开发新功能 | 怀谷 - - + + -
                                    Skip to content
                                    On this page

                                    当开发新功能

                                    从dev分支新建feature分支 开发完合并进去

                                    bash
                                    git checkout -b feature dev 
                                    +    
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\347\264\247\346\200\245bug.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\347\264\247\346\200\245bug.html"
                                    index a2f8e32..2fbba8f 100644
                                    --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\347\264\247\346\200\245bug.html"
                                    +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/git/\345\234\272\346\231\257\345\217\212\350\247\243\345\206\263\346\226\271\346\241\210/\347\264\247\346\200\245bug.html"
                                    @@ -6,8 +6,8 @@
                                         怀谷 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    -    
                                    -    
                                    +    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/index.html" "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/index.html"
                                    index 910ca7f..3d47159 100644
                                    --- "a/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/index.html"
                                    +++ "b/\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/index.html"
                                    @@ -6,8 +6,8 @@
                                         怀谷 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    -    
                                    -    
                                    +    
                                    +    
                                    +    
                                         
                                       
                                     
                                    \ No newline at end of file
                                    diff --git "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/HTML+CSS.html" "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/HTML+CSS.html"
                                    index a28e17a..6c9d162 100644
                                    --- "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/HTML+CSS.html"
                                    +++ "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/HTML+CSS.html"
                                    @@ -6,8 +6,8 @@
                                         HTML+CSS基础面试题 | 怀谷
                                         
                                         
                                    -    
                                    -    
                                    +    
                                    +    
                                         
                                         
                                       
                                       
                                       
                                    -    
                                    Skip to content
                                    On this page

                                    HTML+CSS基础面试题

                                    HTML面试题

                                    • 如何理解HTML语义化?

                                      • 让人更容易读(增加代码可读性)
                                      • 让搜索引擎更容易读(SEO)
                                    • 默认哪些HTML标签是块级,哪些是内联?

                                      • display:block/table; div h1 h2 table ul ol p等;不管内容多少都要独占一行
                                      • display:inline/inline-block; span img input button等;不会独占一行,直至浏览器的边缘
                                    • 什么是DOCTYPE,有何作用?

                                      • Doctype是HTML5的文档声明,通过它可以告诉浏览器,使用哪一个HTML版本标准解析文档
                                    • src和href的区别?

                                      • src全称source,通常用于img、video、audio、script元素,通过src指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src资源时,它会将资源下载并应用到文档内,比如说:js脚本、img图片、frame等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js脚本放在底部而不是头部的原因。
                                      • href:全称hyper reference,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a、link元素。
                                    • title和H1的区别、b与strong的区别、i与em的区别

                                      • title 属性表示网页的标题,h1 元素则表示层次明确的页面内容标题,对页面信息的抓取也有很大的影响
                                      • strong 是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:strong会重读,而b是展示强调内容、
                                      • iitalic(斜体)的简写,是早期的斜体元素,表示内容展示为斜体,而 ememphasize(强调)的简写,表示强调的文本
                                    • 什么是严格模式与混杂模式?

                                      • 严格模式:是以浏览器支持的最高标准运行
                                      • 混杂模式:页面以宽松向下兼容的方式显示,模拟老式浏览器的行为
                                    • H5和HTML5的区别?

                                      • H5是一个产品名词,包含了最新的HTML5、CSS3、ES6等新技术来制作的应用
                                      • HTML5是一个技术名词,指的就是第五代HTML
                                    • 对于web标准w3c的理解

                                      • Web标准简单来说可以分为结构、表现、行为。其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。行为指的是页面和用户具有一定的交互,这部分主要由JS组成
                                      • w3c,全称:world wide web consortium是一个制定各种标准的非盈利性组织,也叫万维网联盟,标准包括HTML、CSS、ECMAScript等等,web标准的制定有很多好处,比如说:
                                        • 可以统一开发流程,统一使用标准化开发工具(VSCode、WebStorm、Sublime),方便多人协作
                                        • 学习成本降低,只需要学习标准就行,否则就要学习各个浏览器厂商标准
                                        • 跨平台,方便迁移都不同设备
                                        • 降低代码维护成本
                                    • HTML5新增了哪些新特性?

                                      • HTML5主要是关于图像、位置、存储、多任务等功能的增加:
                                        • 语义化标签,如:article、footer、header、nav等
                                        • 视频video、音频audio
                                        • 画布canvas
                                        • 表单控件,calemdar、date、time、email
                                        • 地理
                                        • 本地离线存储,localStorage长期存储数据,浏览器关闭后数据不丢失,sessionStorage的数据在浏览器关闭后自动删除
                                        • 拖拽释放
                                    • 你知道SEO中的TDK吗?

                                      • 在SEO中,TDK其实就是titledescriptionkeywords这三个标签,title表示标题标签,description是描述标签,keywords是关键词标签

                                    CSS面试题

                                    布局

                                    • 盒子模型的宽度如何计算

                                      • 标准盒模型的宽等于offsetWidth =(内容宽度+内边距+边框),无外边距
                                      • 怪异盒模型,设置的宽度值包括 内容宽度+内边距+边框,自动压缩内容宽度
                                    • margin纵向重叠问题

                                      • 相邻元素的margin-top和margin-bottom会发生重叠
                                      • 空内容的p标签也会重叠
                                      • 答案:15px
                                    • margin的top left right bottom负值的情况?

                                      • margin-top/left负值,元素向上、左移动
                                      • margin-right负值,自身不受影响,右侧元素左移
                                      • margin-bottom负值,自身不受影响,下方元素上移
                                    • bfc的理解与应用?

                                      • Block format context, 块级格式化上下文

                                      • 是 一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素

                                      • 形成bfc的常见条件?

                                        • float不为none
                                        • position为absolute或fixed
                                        • overflow不为none,如hidden
                                        • display:flex inline-block等
                                      • bfc的常见应用

                                        • 清除浮动
                                    • float布局的问题,以及clearfix

                                      • 实现圣杯布局和双飞翼布局

                                        • 三栏布局,中间一栏最先加载和渲染(内容最重要)
                                        • 两侧内容固定,中间内容随宽度自适应
                                        • 一般用于pc网页
                                      • 圣杯布局和双飞翼布局的技术总结

                                        • 使用float布局
                                        • 两侧使用margin负值,以便和中间内容横向重叠
                                        • 防止中间内容被两侧覆盖,一个用padding,一个用margin
                                      • 手写clearfix

                                        • css
                                          .clearfix::after{
                                          +    
                                          Skip to content
                                          On this page

                                          HTML+CSS基础面试题

                                          HTML面试题

                                          • 如何理解HTML语义化?

                                            • 让人更容易读(增加代码可读性)
                                            • 让搜索引擎更容易读(SEO)
                                          • 默认哪些HTML标签是块级,哪些是内联?

                                            • display:block/table; div h1 h2 table ul ol p等;不管内容多少都要独占一行
                                            • display:inline/inline-block; span img input button等;不会独占一行,直至浏览器的边缘
                                          • 什么是DOCTYPE,有何作用?

                                            • Doctype是HTML5的文档声明,通过它可以告诉浏览器,使用哪一个HTML版本标准解析文档
                                          • src和href的区别?

                                            • src全称source,通常用于img、video、audio、script元素,通过src指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src资源时,它会将资源下载并应用到文档内,比如说:js脚本、img图片、frame等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js脚本放在底部而不是头部的原因。
                                            • href:全称hyper reference,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a、link元素。
                                          • title和H1的区别、b与strong的区别、i与em的区别

                                            • title 属性表示网页的标题,h1 元素则表示层次明确的页面内容标题,对页面信息的抓取也有很大的影响
                                            • strong 是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:strong会重读,而b是展示强调内容、
                                            • iitalic(斜体)的简写,是早期的斜体元素,表示内容展示为斜体,而 ememphasize(强调)的简写,表示强调的文本
                                          • 什么是严格模式与混杂模式?

                                            • 严格模式:是以浏览器支持的最高标准运行
                                            • 混杂模式:页面以宽松向下兼容的方式显示,模拟老式浏览器的行为
                                          • H5和HTML5的区别?

                                            • H5是一个产品名词,包含了最新的HTML5、CSS3、ES6等新技术来制作的应用
                                            • HTML5是一个技术名词,指的就是第五代HTML
                                          • 对于web标准w3c的理解

                                            • Web标准简单来说可以分为结构、表现、行为。其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。行为指的是页面和用户具有一定的交互,这部分主要由JS组成
                                            • w3c,全称:world wide web consortium是一个制定各种标准的非盈利性组织,也叫万维网联盟,标准包括HTML、CSS、ECMAScript等等,web标准的制定有很多好处,比如说:
                                              • 可以统一开发流程,统一使用标准化开发工具(VSCode、WebStorm、Sublime),方便多人协作
                                              • 学习成本降低,只需要学习标准就行,否则就要学习各个浏览器厂商标准
                                              • 跨平台,方便迁移都不同设备
                                              • 降低代码维护成本
                                          • HTML5新增了哪些新特性?

                                            • HTML5主要是关于图像、位置、存储、多任务等功能的增加:
                                              • 语义化标签,如:article、footer、header、nav等
                                              • 视频video、音频audio
                                              • 画布canvas
                                              • 表单控件,calemdar、date、time、email
                                              • 地理
                                              • 本地离线存储,localStorage长期存储数据,浏览器关闭后数据不丢失,sessionStorage的数据在浏览器关闭后自动删除
                                              • 拖拽释放
                                          • 你知道SEO中的TDK吗?

                                            • 在SEO中,TDK其实就是titledescriptionkeywords这三个标签,title表示标题标签,description是描述标签,keywords是关键词标签

                                          CSS面试题

                                          布局

                                          • 盒子模型的宽度如何计算

                                            • 标准盒模型的宽等于offsetWidth =(内容宽度+内边距+边框),无外边距
                                            • 怪异盒模型,设置的宽度值包括 内容宽度+内边距+边框,自动压缩内容宽度
                                          • margin纵向重叠问题

                                            • 相邻元素的margin-top和margin-bottom会发生重叠
                                            • 空内容的p标签也会重叠
                                            • 答案:15px
                                          • margin的top left right bottom负值的情况?

                                            • margin-top/left负值,元素向上、左移动
                                            • margin-right负值,自身不受影响,右侧元素左移
                                            • margin-bottom负值,自身不受影响,下方元素上移
                                          • bfc的理解与应用?

                                            • Block format context, 块级格式化上下文

                                            • 是 一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素

                                            • 形成bfc的常见条件?

                                              • float不为none
                                              • position为absolute或fixed
                                              • overflow不为none,如hidden
                                              • display:flex inline-block等
                                            • bfc的常见应用

                                              • 清除浮动
                                          • float布局的问题,以及clearfix

                                            • 实现圣杯布局和双飞翼布局

                                              • 三栏布局,中间一栏最先加载和渲染(内容最重要)
                                              • 两侧内容固定,中间内容随宽度自适应
                                              • 一般用于pc网页
                                            • 圣杯布局和双飞翼布局的技术总结

                                              • 使用float布局
                                              • 两侧使用margin负值,以便和中间内容横向重叠
                                              • 防止中间内容被两侧覆盖,一个用padding,一个用margin
                                            • 手写clearfix

                                              • css
                                                .clearfix::after{
                                                       content:'';
                                                       display: table;
                                                       clear: both;
                                                @@ -43,8 +43,8 @@
                                                   <p>this is p</p>
                                                 </body>
                                                 

                                              响应式

                                              • rem是什么?

                                                • 相对长度单位,相对于根元素,常用于响应式布局
                                              • 如何实现响应式?

                                                • 使用rem+media-quary,根据不同的屏幕宽度设置html的font-size
                                                • 弊端:“阶梯型”
                                              • 网页视口尺寸

                                                • window.screen.height // 屏幕高度
                                                • window.innerHeight // 网页视口高度
                                                • document.body.clientHeight // body高度
                                              • vw/vh

                                                • vw网页视口宽度大小的1/100
                                                • vh网页视口高度大小的1/100
                                                • vmax两者的较大值,vmin两者的最小值

                                              CSS3

                                              • 关于CSS3动画
                                          - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.html" "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.html" index 88a8e7b..f043d77 100644 --- "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.html" +++ "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\344\275\234\347\224\250\345\237\237\345\222\214\351\227\255\345\214\205.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                          Skip to content
                                          On this page

                                          作用域和闭包

                                          作用域和自由变量

                                          • 作用域

                                            • 全局作用域

                                            • 函数作用域

                                            • 块级作用域(es6新增) if/for/while...中的{}

                                          • 自由变量

                                            • 一个变量在当前的作用域没有定义,但被使用了
                                            • 向上级作用域查找,知道找到为止
                                            • 如果直到全局作用域都没有找到,则报错 xxx is not defined

                                          闭包

                                          • 什么是闭包?

                                            • 作用域应用的特殊情况,有两种表现:

                                              • 函数作为参数被传递
                                              • 函数作为返回值被传递
                                            • js
                                              // 函数作为返回值
                                              +    
                                              Skip to content
                                              On this page

                                              作用域和闭包

                                              作用域和自由变量

                                              • 作用域

                                                • 全局作用域

                                                • 函数作用域

                                                • 块级作用域(es6新增) if/for/while...中的{}

                                              • 自由变量

                                                • 一个变量在当前的作用域没有定义,但被使用了
                                                • 向上级作用域查找,知道找到为止
                                                • 如果直到全局作用域都没有找到,则报错 xxx is not defined

                                              闭包

                                              • 什么是闭包?

                                                • 作用域应用的特殊情况,有两种表现:

                                                  • 函数作为参数被传递
                                                  • 函数作为返回值被传递
                                                • js
                                                  // 函数作为返回值
                                                   function create() {
                                                     const a = 100;
                                                     return function () {
                                                  @@ -86,8 +86,8 @@
                                                     }
                                                   }
                                                   
                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.html" "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.html" index d62fa0a..015ae5d 100644 --- "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.html" +++ "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\216\237\345\236\213\345\222\214\345\216\237\345\236\213\351\223\276.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              原型和原型链

                                              类型判断-instanceof

                                              js
                                              //xialuo Student的实例,Student类继承People类 
                                              +    
                                              Skip to content
                                              On this page

                                              原型和原型链

                                              类型判断-instanceof

                                              js
                                              //xialuo Student的实例,Student类继承People类 
                                               xialuo instanceof Student  // true
                                               xialuo instanceof People  // true
                                               xialuo instanceof Object  // true
                                              @@ -81,8 +81,8 @@
                                                 // 扩展自己的API
                                               }
                                               
                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.html" "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.html" index d317dcf..6a1d70a 100644 --- "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.html" +++ "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\217\230\351\207\217\347\261\273\345\236\213\345\222\214\350\256\241\347\256\227.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              变量类型和计算

                                              值类型与引用类型

                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\274\202\346\255\245.html" "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\274\202\346\255\245.html" index c8d415b..f7bf58c 100644 --- "a/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\274\202\346\255\245.html" +++ "b/\351\235\242\350\257\225/CZ\345\211\215\347\253\257/JS\345\237\272\347\241\200/\345\274\202\346\255\245.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              异步

                                              • 同步

                                                • 指在 主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务
                                                • 也就是调用一旦开始,必须这个调用 返回结果(划重点——)才能继续往后执行。程序的执行顺序和任务排列顺序是一致的。
                                              • 异步

                                                • 异步任务是指不进入主线程,而进入 任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程。
                                                • 程序的执行顺序和任务的排列顺序是不一致的。
                                                • 用的setTimeout和setInterval函数,Ajax都是异步操作
                                              • 实现异步的方法

                                                • 回调函数(Callback)、事件监听、发布订阅、Promise/A+、生成器Generators/ yield、async/await

                                              Promise

                                              • ES6中的Promise 是异步编程的一种方案。从语法上讲,Promise 是一个对象,它可以获取异步操作的消息。
                                              • Promise对象, 可以将异步操作以同步的流程表达出来。使用 Promise 主要有以下好处:
                                                • 可以很好地解决回调地狱的问题
                                                • 语法非常简洁。Promise 对象提供了简洁的API,使得控制异步操作更加容易。
                                              • 状态的表现
                                                • pending状态,不会触发then和catch
                                                • resolved状态,会触发后续的then(onResloved)回调函数
                                                • rejected状态,会触发then(null, onRejected),没有则触发后续的catch回调函数
                                              • then和catch改变状态
                                                • then正常返回resolved,里面报错则返回rejected
                                                • catch正常也返回resolved,里面报错则返回rejected
                                                • catch是一个语法糖,相当于调用Prmise.prototype.then(null, onRejected)
                                              • Promise.all(iterable)
                                                • 语法:var p = Promise.all([p1, p2, p3]);
                                                • Promise.all方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)
                                                • (1) 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
                                                • (2) 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
                                              • Promise.race(iterable)
                                                • 语法:var p = Promise.race([p1, p2, p3]);
                                                • Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。
                                                • Promise.race方法的参数与Promise.all方法一样,如果不是Promise实例,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。

                                              defer和async

                                              • 区别主要在于一个执行时间,defer会在文档解析完之后执行,并且多个defer会按照顺序执行,而async则是在js加载好之后就会执行,并且多个async,哪个加载好就执行哪个

                                              生成器Generators/ yield

                                              • Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,Generator 最大的特点就是可以控制函数的执行。

                                              • 语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

                                              • Generator 函数除了状态机,还是一个遍历器对象生成函数

                                              • 可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果

                                              • yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值

                                              • js
                                                function *foo(x) {
                                                +    
                                                Skip to content
                                                On this page

                                                异步

                                                • 同步

                                                  • 指在 主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务
                                                  • 也就是调用一旦开始,必须这个调用 返回结果(划重点——)才能继续往后执行。程序的执行顺序和任务排列顺序是一致的。
                                                • 异步

                                                  • 异步任务是指不进入主线程,而进入 任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程。
                                                  • 程序的执行顺序和任务的排列顺序是不一致的。
                                                  • 用的setTimeout和setInterval函数,Ajax都是异步操作
                                                • 实现异步的方法

                                                  • 回调函数(Callback)、事件监听、发布订阅、Promise/A+、生成器Generators/ yield、async/await

                                                Promise

                                                • ES6中的Promise 是异步编程的一种方案。从语法上讲,Promise 是一个对象,它可以获取异步操作的消息。
                                                • Promise对象, 可以将异步操作以同步的流程表达出来。使用 Promise 主要有以下好处:
                                                  • 可以很好地解决回调地狱的问题
                                                  • 语法非常简洁。Promise 对象提供了简洁的API,使得控制异步操作更加容易。
                                                • 状态的表现
                                                  • pending状态,不会触发then和catch
                                                  • resolved状态,会触发后续的then(onResloved)回调函数
                                                  • rejected状态,会触发then(null, onRejected),没有则触发后续的catch回调函数
                                                • then和catch改变状态
                                                  • then正常返回resolved,里面报错则返回rejected
                                                  • catch正常也返回resolved,里面报错则返回rejected
                                                  • catch是一个语法糖,相当于调用Prmise.prototype.then(null, onRejected)
                                                • Promise.all(iterable)
                                                  • 语法:var p = Promise.all([p1, p2, p3]);
                                                  • Promise.all方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)
                                                  • (1) 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
                                                  • (2) 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
                                                • Promise.race(iterable)
                                                  • 语法:var p = Promise.race([p1, p2, p3]);
                                                  • Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。
                                                  • Promise.race方法的参数与Promise.all方法一样,如果不是Promise实例,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。

                                                defer和async

                                                • 区别主要在于一个执行时间,defer会在文档解析完之后执行,并且多个defer会按照顺序执行,而async则是在js加载好之后就会执行,并且多个async,哪个加载好就执行哪个

                                                生成器Generators/ yield

                                                • Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,Generator 最大的特点就是可以控制函数的执行。

                                                • 语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

                                                • Generator 函数除了状态机,还是一个遍历器对象生成函数

                                                • 可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果

                                                • yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值

                                                • js
                                                  function *foo(x) {
                                                     let y = 2 * (yield (x + 1))
                                                     let z = yield (y / 3)
                                                     return (x + y + z)
                                                  @@ -86,8 +86,8 @@
                                                     alert('setTimeout') //此时DOM渲染完成
                                                   })
                                                   
                                              • 从event loop解释,为何微任务执行更早

                                                • 当执行微任务时,会等待时机,时机到后放入微任务队列
                                                • 而event loop会在call stack清空后先将所有的微任务一个一个取出来执行
                                                • 再尝试DOM的渲染,最后取出callback quene中的任务执行
                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/DOM\345\222\214BOM.html" "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/DOM\345\222\214BOM.html" index 6dc4718..a7702cd 100644 --- "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/DOM\345\222\214BOM.html" +++ "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/DOM\345\222\214BOM.html" @@ -6,8 +6,8 @@ DOM和BOM | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              DOM和BOM

                                              JavaScript的结构

                                              JavaScript = ECMAscript + BOM + DOM

                                              ECMAscript:JS的标准,规定了各个浏览器如何执行JS的语法。

                                              DOM:用于操作XML、HTML文档的应用编程接口。给JS提供了访问和操作HTML元素的方法

                                              BOM:浏览器对象模型,是控制浏览器行为的接口。

                                              DOM

                                              DOM树

                                              HTML元素所构成的树

                                              DOM操作元素方法

                                              获取节点的DOM方法:

                                              1. getElementById(id):通过元素的id属性获取单个元素节点,返回对象
                                              2. getElementsByTagName(tagName):通过元素的标签名获取一组元素节点,返回数组
                                              3. getElementsByClassName(className):通过元素的类名获取一组元素节点,返回数组
                                              4. getElementsByName(name_content):通过元素的name属性值来获取元素,返回数组
                                              5. querySelector(selector):通过选择器获取匹配的第一个元素节点,对象
                                              6. querySelectorAll(selector):通过选择器获取匹配的所有元素节点,数组

                                              获取/设置元素的属性值的DOM方法:

                                              1. getAttribute(name):获取元素的指定属性值。
                                              2. setAttribute(name, value):设置元素的指定属性值。
                                              3. removeAttribute(name):移除元素的指定属性。

                                              创建节点(Node)的DOM方法:

                                              1. createElement(tagName):创建指定标签名的元素节点。
                                              2. createTextNode(text):创建包含指定文本内容的文本节点。
                                              3. createDocumentFragment():创建一个空的文档片段节点,可以用来存储和操作一组节点。

                                              增添节点的DOM方法:

                                              1. appendChild(node):将一个节点添加到父节点的子节点列表末尾。
                                              2. insertBefore(newNode, referenceNode):在父节点的子节点列表中,在指定参考节点之前插入新节点。

                                              删除节点的DOM方法:

                                              1. removeChild(node):从父节点的子节点列表中移除指定节点。
                                              2. parentNode.removeChild(node):通过父节点移除指定节点。

                                              DOM常见的一些属性:

                                              1. innerHTML:元素的HTML内容。
                                              2. textContent:元素及其后代节点的文本内容。
                                              3. className:元素的类名。
                                              4. id:元素的唯一标识符。
                                              5. style:元素的行内样式。
                                              6. parentNode:元素的父节点。
                                              7. childNodes:元素的子节点列表。
                                              8. previousSibling:元素的前一个同级节点。
                                              9. nextSibling:元素的后一个同级节点。

                                              BOM

                                              定义

                                              浏览器对象模型,核心对象window,包含DOM。把浏览器作为对象来看待,顶级对象就是window,由一系列相关对象构成,并为每个对象提供方法和属性。

                                              document,location,navigation,screen,history

                                              window对象常见事件

                                              属性/方法含义
                                              opener当前窗口的父窗口
                                              length窗口中的框架数
                                              document窗口中当前显示的文档对象
                                              alert(string)创建一个警告对话框,显示一条信息
                                              close()关闭窗口
                                              confirm()创建一个需要用户确认的对话框
                                              open(url,name,[options])打开一个新窗口并返回新 window 对象
                                              prompt(text,defaultInput)创建一个对话框要求用户输入信息
                                              setInterval(expression,milliseconds)经过指定时间间隔计算一个表达式
                                              setInterval(function,millis enconds,[arguments])经过指定时间间隔后调用一个函数
                                              setTimeout(expression,milli seconds)在定时器超过后计算一个表达式
                                              setTimeout(expression,milli seconds,[arguments])在定时器超过时后计算一个函数

                                              location对象

                                              location用于获取或设置URL,能够解析URL,返回对象

                                              window.location = location = document.location

                                              属性/方法内容
                                              host主机名:端口号
                                              hostname主机名
                                              href整个 URL
                                              pathname路径名
                                              port端口号
                                              protocol协议部分
                                              search查询字符串
                                              reload()重载当前 URL
                                              repalce()用新的 URL 替换当前页面

                                              history对象

                                              与浏览器历史记录交互,包含用户访问过的URL(窗口打开开始记)

                                              属性/方法描述
                                              lengthhistory 对象中的记录数
                                              back()前往浏览器历史条目前一个 URL,类似后退
                                              forward()前往浏览器历史条目下一个 URL,类似前进
                                              go(num)浏览器在 history 对象中向前或向后

                                              BOM中识别客户端浏览器的一个window属性。

                                              属性说明
                                              appName完整的浏览器名称和版本信息
                                              platform浏览器所在的系统平台
                                              plugins浏览器中安装的插件信息的数 组
                                              userAgent浏览器的用户代理字符串
                                              userLanguage操作系统的默认语言
                                              - - +
                                              Skip to content
                                              On this page

                                              DOM和BOM

                                              JavaScript的结构

                                              JavaScript = ECMAscript + BOM + DOM

                                              ECMAscript:JS的标准,规定了各个浏览器如何执行JS的语法。

                                              DOM:用于操作XML、HTML文档的应用编程接口。给JS提供了访问和操作HTML元素的方法

                                              BOM:浏览器对象模型,是控制浏览器行为的接口。

                                              DOM

                                              DOM树

                                              HTML元素所构成的树

                                              DOM操作元素方法

                                              获取节点的DOM方法:

                                              1. getElementById(id):通过元素的id属性获取单个元素节点,返回对象
                                              2. getElementsByTagName(tagName):通过元素的标签名获取一组元素节点,返回数组
                                              3. getElementsByClassName(className):通过元素的类名获取一组元素节点,返回数组
                                              4. getElementsByName(name_content):通过元素的name属性值来获取元素,返回数组
                                              5. querySelector(selector):通过选择器获取匹配的第一个元素节点,对象
                                              6. querySelectorAll(selector):通过选择器获取匹配的所有元素节点,数组

                                              获取/设置元素的属性值的DOM方法:

                                              1. getAttribute(name):获取元素的指定属性值。
                                              2. setAttribute(name, value):设置元素的指定属性值。
                                              3. removeAttribute(name):移除元素的指定属性。

                                              创建节点(Node)的DOM方法:

                                              1. createElement(tagName):创建指定标签名的元素节点。
                                              2. createTextNode(text):创建包含指定文本内容的文本节点。
                                              3. createDocumentFragment():创建一个空的文档片段节点,可以用来存储和操作一组节点。

                                              增添节点的DOM方法:

                                              1. appendChild(node):将一个节点添加到父节点的子节点列表末尾。
                                              2. insertBefore(newNode, referenceNode):在父节点的子节点列表中,在指定参考节点之前插入新节点。

                                              删除节点的DOM方法:

                                              1. removeChild(node):从父节点的子节点列表中移除指定节点。
                                              2. parentNode.removeChild(node):通过父节点移除指定节点。

                                              DOM常见的一些属性:

                                              1. innerHTML:元素的HTML内容。
                                              2. textContent:元素及其后代节点的文本内容。
                                              3. className:元素的类名。
                                              4. id:元素的唯一标识符。
                                              5. style:元素的行内样式。
                                              6. parentNode:元素的父节点。
                                              7. childNodes:元素的子节点列表。
                                              8. previousSibling:元素的前一个同级节点。
                                              9. nextSibling:元素的后一个同级节点。

                                              BOM

                                              定义

                                              浏览器对象模型,核心对象window,包含DOM。把浏览器作为对象来看待,顶级对象就是window,由一系列相关对象构成,并为每个对象提供方法和属性。

                                              document,location,navigation,screen,history

                                              window对象常见事件

                                              属性/方法含义
                                              opener当前窗口的父窗口
                                              length窗口中的框架数
                                              document窗口中当前显示的文档对象
                                              alert(string)创建一个警告对话框,显示一条信息
                                              close()关闭窗口
                                              confirm()创建一个需要用户确认的对话框
                                              open(url,name,[options])打开一个新窗口并返回新 window 对象
                                              prompt(text,defaultInput)创建一个对话框要求用户输入信息
                                              setInterval(expression,milliseconds)经过指定时间间隔计算一个表达式
                                              setInterval(function,millis enconds,[arguments])经过指定时间间隔后调用一个函数
                                              setTimeout(expression,milli seconds)在定时器超过后计算一个表达式
                                              setTimeout(expression,milli seconds,[arguments])在定时器超过时后计算一个函数

                                              location对象

                                              location用于获取或设置URL,能够解析URL,返回对象

                                              window.location = location = document.location

                                              属性/方法内容
                                              host主机名:端口号
                                              hostname主机名
                                              href整个 URL
                                              pathname路径名
                                              port端口号
                                              protocol协议部分
                                              search查询字符串
                                              reload()重载当前 URL
                                              repalce()用新的 URL 替换当前页面

                                              history对象

                                              与浏览器历史记录交互,包含用户访问过的URL(窗口打开开始记)

                                              属性/方法描述
                                              lengthhistory 对象中的记录数
                                              back()前往浏览器历史条目前一个 URL,类似后退
                                              forward()前往浏览器历史条目下一个 URL,类似前进
                                              go(num)浏览器在 history 对象中向前或向后

                                              BOM中识别客户端浏览器的一个window属性。

                                              属性说明
                                              appName完整的浏览器名称和版本信息
                                              platform浏览器所在的系统平台
                                              plugins浏览器中安装的插件信息的数 组
                                              userAgent浏览器的用户代理字符串
                                              userLanguage操作系统的默认语言
                                              + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.html" "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.html" index dce7dc6..d65c978 100644 --- "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.html" +++ "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/new\346\223\215\344\275\234\347\254\246\345\256\236\347\216\260\345\216\237\347\220\206.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              new操作符的实现原理

                                              new操作符的定义

                                              使用示例(对象类型和对象实例)

                                              new操作符可以用来创建一个用户定义的对象类型的实例具有构造函数的内置对象的实例。(来自MDN的定义)

                                              简而言之:new可以创建对象实例

                                              使用场景:

                                              js
                                              function newTest(arguments1,arguments2) {	//构造一个函数newTest
                                              +    
                                              Skip to content
                                              On this page

                                              new操作符的实现原理

                                              new操作符的定义

                                              使用示例(对象类型和对象实例)

                                              new操作符可以用来创建一个用户定义的对象类型的实例具有构造函数的内置对象的实例。(来自MDN的定义)

                                              简而言之:new可以创建对象实例

                                              使用场景:

                                              js
                                              function newTest(arguments1,arguments2) {	//构造一个函数newTest
                                                   this.arguments1 = arguments1;
                                                   this.arguments2 = arguments2;
                                               }
                                              @@ -65,9 +65,9 @@
                                               
                                               console.log(test.arguments1);	//'demo1'
                                               console.log(test.arguments2);	//'demo2'
                                              -
                                              - - +
                                              + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\211\213\345\206\231call.html" "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\211\213\345\206\231call.html" new file mode 100644 index 0000000..152dc0d --- /dev/null +++ "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\211\213\345\206\231call.html" @@ -0,0 +1,81 @@ + + + + + + 怀谷 | 怀谷 + + + + + + + + + + +
                                              Skip to content
                                              On this page
                                              js
                                              Function.prototype.myCall = function (context) {
                                              +  if (context === null || context === undefined) {
                                              +    context = window;
                                              +  }
                                              +
                                              +  // 将 context 转换为对象
                                              +  let type = typeof context;
                                              +  switch (type) {
                                              +    case "string":
                                              +      context = new String(context);
                                              +      break;
                                              +    case "boolean":
                                              +      context = new Boolean(context);
                                              +      break;
                                              +    case "number":
                                              +      context = new Number(context);
                                              +      break;
                                              +  }
                                              +
                                              +  // 生成唯一的属性名,避免与已有属性冲突
                                              +  let key = Date.now().toString(36);
                                              +  context[key] = this;
                                              +
                                              +  // 获取参数并执行函数
                                              +  let args = Array.from(arguments).slice(1);
                                              +  let result = context[key](...args);
                                              +
                                              +  // 删除临时属性
                                              +  delete context[key];
                                              +
                                              +  return result;
                                              +};
                                              +
                                              +var obj = {
                                              +  name: "lucky",
                                              +  fn: function () {
                                              +    console.log("hello");
                                              +  },
                                              +};
                                              +
                                              +function fn1(a, b) {
                                              +  console.log(this, a + b);
                                              +  return "123";
                                              +}
                                              +
                                              +console.log(fn1.call(obj, 1, 2));
                                              +
                                              +fn1.myCall(obj, 1, 2);
                                              +fn1.myCall(null, 1, 2);
                                              +fn1.myCall(undefined, 1, 2);
                                              +fn1.myCall(1, 1, 2);
                                              +fn1.myCall("str", 1, 2);
                                              +fn1.myCall(true, 1, 2);
                                              + 
                                              +
                                              + + + + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.html" "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.html" index ed6bee0..5f51fa4 100644 --- "a/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.html" +++ "b/\351\235\242\350\257\225/NONI/JS/JS\345\237\272\347\241\200/\346\225\260\347\273\204\345\216\237\347\224\237\346\226\271\346\263\225.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              数组原生方法

                                              一、数组和字符串的转换方法(不改变原数组)

                                              • toString() :将数组转换成⼀个字符串;

                                              • join() :将数组用连接符连接成一个字符串。

                                                js
                                                const arr = [1,2,'b','c']
                                                +    
                                                Skip to content
                                                On this page

                                                数组原生方法

                                                一、数组和字符串的转换方法(不改变原数组)

                                                • toString() :将数组转换成⼀个字符串;

                                                • join() :将数组用连接符连接成一个字符串。

                                                  js
                                                  const arr = [1,2,'b','c']
                                                   const change1 = arr.toString()
                                                   console.log(arr,change1)//(4) [1, 2, 'b', 'c'] '1,2,b,c'
                                                   const change2 = arr.join('')
                                                  @@ -75,9 +75,9 @@
                                                   })
                                                   
                                                   console.log(sum)	//10
                                                  -
                                                - - +
                                              + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/NONI/Vue/v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.html" "b/\351\235\242\350\257\225/NONI/Vue/v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.html" index d8fa6bd..978ddb3 100644 --- "a/\351\235\242\350\257\225/NONI/Vue/v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.html" +++ "b/\351\235\242\350\257\225/NONI/Vue/v-if\345\222\214v-for\345\220\214\346\227\266\344\275\277\347\224\250\351\227\256\351\242\230.html" @@ -6,8 +6,8 @@ v-if和v-for同时使用问题 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              v-if和v-for同时使用问题

                                              在vue2的官方文档中提到了不推荐v-if和v-for同时使用,给出的解释是在两者中,v-for具有比v-if更高的优先级(vue2)。

                                              实例

                                              html
                                              <ul>
                                              +    
                                              Skip to content
                                              On this page

                                              v-if和v-for同时使用问题

                                              在vue2的官方文档中提到了不推荐v-if和v-for同时使用,给出的解释是在两者中,v-for具有比v-if更高的优先级(vue2)。

                                              实例

                                              html
                                              <ul>
                                                <li
                                                 v-for="user in users"
                                                 v-if="user.isActive"
                                              @@ -58,8 +58,8 @@
                                               </ul>
                                               
                                               

                                              适用场景

                                              该方法避免了渲染本应该被隐藏的列表。如果需要根据某个条件动态渲染一组元素时,可以使用v-if指令。

                                              优点

                                              • 使用v-if指令可以更加灵活地控制元素的显示和隐藏,可以根据需要动态地添加或删除DOM元素。
                                              • 在容器元素上使用v-if可以提高页面性能,因为只有在shouldShowUserstrue时才会渲染列表,而不是在每个列表项上都进行判断。

                                              缺点

                                              • 在模板中嵌套过多的指令可能会使代码变得难以理解和维护。

                                              总结

                                              • 在vue2中,不要把v-ifv-for 同时用在同一个元素上,会带来性能上的浪费,即每次渲染都会先循环再进行条件的判断。
                                              • 替代方法一,可通过计算属性computed提前过滤掉那些不需要显示的项来实现最终效果。
                                              • 替代方法二,可通过在外层添加v-if判断,内部进行v-for循环的方法来实现最终效果。
                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/HTTP/HTTP\347\232\204\344\274\230\345\205\210\347\272\247.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/HTTP/HTTP\347\232\204\344\274\230\345\205\210\347\272\247.html" index 7906594..4e9e5f9 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/HTTP/HTTP\347\232\204\344\274\230\345\205\210\347\272\247.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/HTTP/HTTP\347\232\204\344\274\230\345\205\210\347\272\247.html" @@ -6,8 +6,8 @@ 强缓存 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              强缓存

                                              Expires(HTTP/1.0)和Cache-Control(HTTP1.1),其中Cache-Control优先级高于Expires 位于请求/响应头

                                              Expires

                                              Expires: Wed, 22 Oct 2018 08:41:00 GMT
                                              +    
                                              Skip to content
                                              On this page

                                              强缓存

                                              Expires(HTTP/1.0)和Cache-Control(HTTP1.1),其中Cache-Control优先级高于Expires 位于请求/响应头

                                              Expires

                                              Expires: Wed, 22 Oct 2018 08:41:00 GMT
                                               

                                              由于Expires受制于客户端时间,修改客户端时间可能导致缓存失效

                                              Cache-Control

                                              请求/响应头,缓存控制字段,精确控制缓存策略 这里涉及到的字段是max-age,Cache-Control还有其他字段

                                              协商缓存

                                              1. 没有 Cache-Control 和 Expires
                                              2. Cache-Control 和 Expires 过期
                                              3. 设置了 no-cache

                                              如果有更新即更新缓存 200 没有缓存则更新浏览器缓存有效期 304

                                              ETag

                                              对比HTTP1.x

                                              使用HTTP/1.x,浏览器可以完全控制资源加载顺序。每个连接一次只能支持一个资源请求,服务器会尽快返回请求的内容。浏览器可以通过决定何时请求资源以及打开多少个并行连接来安排请求

                                              1.HTTP 协议老的标准是HTTP/1.0,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。即无状态,并且HTTP1的连接无法复用导致每一次请求都会经历三次握手和四次挥手

                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/flexandgrid.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/flexandgrid.html" index 4b1ac32..0ea7982 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/flexandgrid.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/flexandgrid.html" @@ -6,8 +6,8 @@ flex | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              flex

                                              Webkit 内核的浏览器,必须加上-webkit前缀。
                                              +    
                                              Skip to content
                                              On this page

                                              flex

                                              Webkit 内核的浏览器,必须加上-webkit前缀。
                                               

                                              TIP

                                              flex 的核心的概念就是 容器 和 轴。容器包括外层的 父容器 和内层的 子容器,轴包括 主轴 和 交叉轴

                                              设置子容器沿主轴排列:justify-content

                                              css
                                              flex-start:起始端对齐
                                               flex-end:末尾段对齐
                                               center:居中对齐
                                              @@ -51,8 +51,8 @@
                                                 grid-template-rows: repeat(3, 33.33%);
                                               }
                                               

                                              auto-fill

                                              有时,单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。

                                              fr 关键字

                                              为了方便表示比例关系,网格布局提供了fr关键字(fraction 的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。

                                              间隔

                                              grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)。

                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/url\345\210\260\351\241\265\351\235\242/\346\200\273\347\253\240.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/url\345\210\260\351\241\265\351\235\242/\346\200\273\347\253\240.html" index f2ac165..d8d0008 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/url\345\210\260\351\241\265\351\235\242/\346\200\273\347\253\240.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/url\345\210\260\351\241\265\351\235\242/\346\200\273\347\253\240.html" @@ -6,8 +6,8 @@ URL面试题目 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              URL面试题目

                                              面试中有一个高频的面试题就是当输入URL时会发生什么,越详细越好,ok,接下来我们一起来看看

                                              DNS域名解析

                                              在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名(www.baidu.com)找到对应的服务器,而是要通过 IP 地址(220.114.23.56)

                                              1.1 DNS域名解析

                                              按照顺序为浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存

                                              - - +
                                              Skip to content
                                              On this page

                                              URL面试题目

                                              面试中有一个高频的面试题就是当输入URL时会发生什么,越详细越好,ok,接下来我们一起来看看

                                              DNS域名解析

                                              在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名(www.baidu.com)找到对应的服务器,而是要通过 IP 地址(220.114.23.56)

                                              1.1 DNS域名解析

                                              按照顺序为浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存

                                              + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\345\276\252\347\216\257.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\345\276\252\347\216\257.html" index e2f9cc8..4078bcf 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\345\276\252\347\216\257.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\345\276\252\347\216\257.html" @@ -6,8 +6,8 @@ EventLoop | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              EventLoop

                                              宏任务(MacroTask):

                                              setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

                                              MicroTask(微任务)

                                              Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

                                              Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行

                                              js
                                              const promise = new Promise((resolve, reject) => {
                                              +    
                                              Skip to content
                                              On this page

                                              EventLoop

                                              宏任务(MacroTask):

                                              setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。

                                              MicroTask(微任务)

                                              Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)

                                              Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行

                                              js
                                              const promise = new Promise((resolve, reject) => {
                                                 console.log(1);
                                                 setTimeout(() => {
                                                   console.log(2);
                                              @@ -34,8 +34,8 @@
                                               console.log(6);
                                               //146235
                                               
                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\346\234\272\345\210\266.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\346\234\272\345\210\266.html" index 19d9c19..ab6063c 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\346\234\272\345\210\266.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\344\272\213\344\273\266/\344\272\213\344\273\266\346\234\272\345\210\266.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              事件捕获阶段 处于目标阶段 事件冒泡阶段

                                              TIP

                                              JS代码只能执行捕获或者冒泡其中的一个阶段 onclick 和 attachEvent 只能得到冒泡阶段 addEventListener (type, listener[, useCapture]) 第三个参数如果是true,表示在事件捕获阶段调用事件处理程序;如果是false(不写默认就是false),表示在事件冒泡阶段电泳事件处理程序。 在实际开发中,我们很少使用事件捕获(低版本ie不兼容),我们更关注事件冒泡 有些事件是没有冒泡的,比如onblur、onfocus、onmouseover、onmouseleave

                                              this返回的是绑定事件的DOM元素,e.target返回的是触发事件的对象

                                              事件代理和事件委托

                                              冒泡阶段 this是可以变化的,但event.target不会变化

                                              target 属性指向的是事件目标,而 currentTarget 属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而 target 指向的可能不是定义时的事件目标。

                                              html
                                                  <div id="HUAIGU">
                                              +    
                                              Skip to content
                                              On this page

                                              事件捕获阶段 处于目标阶段 事件冒泡阶段

                                              TIP

                                              JS代码只能执行捕获或者冒泡其中的一个阶段 onclick 和 attachEvent 只能得到冒泡阶段 addEventListener (type, listener[, useCapture]) 第三个参数如果是true,表示在事件捕获阶段调用事件处理程序;如果是false(不写默认就是false),表示在事件冒泡阶段电泳事件处理程序。 在实际开发中,我们很少使用事件捕获(低版本ie不兼容),我们更关注事件冒泡 有些事件是没有冒泡的,比如onblur、onfocus、onmouseover、onmouseleave

                                              this返回的是绑定事件的DOM元素,e.target返回的是触发事件的对象

                                              事件代理和事件委托

                                              冒泡阶段 this是可以变化的,但event.target不会变化

                                              target 属性指向的是事件目标,而 currentTarget 属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而 target 指向的可能不是定义时的事件目标。

                                              html
                                                  <div id="HUAIGU">
                                                       <div>
                                                           dom1
                                                       </div>
                                              @@ -36,8 +36,8 @@
                                                       })
                                                   </script>
                                               

                                              stopPropagation() 阻止事件冒泡,设置之后,点击该元素时父元素绑定的事件就不会再触发; preventDefault() 阻止默认事件发生; stopImmediatePropagation() 用来阻止监听同一事件的其他事件监听器被调用以及阻止事件冒泡

                                              - - + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.html" index db16415..f8a1345 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\345\256\242\346\210\267\347\253\257\345\255\230\345\202\250.html" @@ -6,8 +6,8 @@ cookie 大小(4KB) | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              cookie 大小(4KB)

                                              当服务器收到 HTTP 请求时,服务器可以在响应头里设置一个 Set-cookie 选项,浏览器接收到响应后会自动保存下 Cookie,之后浏览器对该服务器的每一次请求中都会通过请求头把 Cookie 信息发送给服务器。通过以下 node 版本代码案例(通过 req.cookie 设置 cookie,而不是设置请求头的 Set-cookie字段)当请求了 '/' 路径 Cookie 就会保存如下图信息。后面请求其他 path (如:/login)时在以下代码中都能通过 'req.headers.cookie' 打印出请求携带的 Cookie 信息(即为浏览器保存的 Cookie)。

                                              Cookie是保存在客户端磁盘上的,所以不宜占据太多磁盘空间。同时,Cookie是绑定在特定域名上的。当设定了一个Cookie之后,再给创建它的域名发一个请求时,还会包含该Cookie。所以对Cookie的限制是对每个域来说的。但各个浏览器也有不同: IE6及以下每个域名最多包含20个Cookie; IE7及以上每个域名最多50个Cookie; Firefox每个域名最多50个Cookie; Opera下每个域名最多30个Cookie; Sarafi和Chrome对每个域的Cookie数目没有严格限制。

                                              1.过期时间设置(Expires 字段) 2.设置域(domain),指定 cookie 在哪个域下可以被接受 3.设置路径(path),指定 cookie 在当前主机下哪些路径可以接受 Cookie 4.设置不能通过 javascript 访问 Cookie。(HttpOnly字段) 5.设置一段时间过期。(Max-Age) 6.设置 secure 字段 7.设置 someSite ,它有三个可选值 None、strict、Lax

                                              session

                                              session是一种服务度机制,类似散列表结构来存储用户数据 浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid sessionid唯一标识这个session 服务器响应时把sessionid发送给浏览器 浏览器第二次向服务器发送请求时就会携带这个sessionid 服务器通过这个id找到对应的session获取用户数据

                                              TIP

                                              session保存在服务器,cookie保存在客户端 session中保存的时对象,cookie保存的是字符串 session不能区分路径,同一个用户访问一个网站期间,所有的session在任何一个地方都可以访问 cookie如果设置路径,则在某些地方不能访问 session需要借助cookie才能正常工作,如果禁用cookie,session则失效 客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器

                                              localstorage and SessionStorage(5101KB)

                                              失效时间 sessionStorage的失效时间为当前会话是否被关闭, 如果当前会话中存储有key和value,会话关闭数据则消失,所以我们可以得到结论,sessionStorage的失效取决于会话 localStorage的失效时间为用户手动删除,相比sessionStorage的

                                              - - +
                                              Skip to content
                                              On this page

                                              cookie 大小(4KB)

                                              当服务器收到 HTTP 请求时,服务器可以在响应头里设置一个 Set-cookie 选项,浏览器接收到响应后会自动保存下 Cookie,之后浏览器对该服务器的每一次请求中都会通过请求头把 Cookie 信息发送给服务器。通过以下 node 版本代码案例(通过 req.cookie 设置 cookie,而不是设置请求头的 Set-cookie字段)当请求了 '/' 路径 Cookie 就会保存如下图信息。后面请求其他 path (如:/login)时在以下代码中都能通过 'req.headers.cookie' 打印出请求携带的 Cookie 信息(即为浏览器保存的 Cookie)。

                                              Cookie是保存在客户端磁盘上的,所以不宜占据太多磁盘空间。同时,Cookie是绑定在特定域名上的。当设定了一个Cookie之后,再给创建它的域名发一个请求时,还会包含该Cookie。所以对Cookie的限制是对每个域来说的。但各个浏览器也有不同: IE6及以下每个域名最多包含20个Cookie; IE7及以上每个域名最多50个Cookie; Firefox每个域名最多50个Cookie; Opera下每个域名最多30个Cookie; Sarafi和Chrome对每个域的Cookie数目没有严格限制。

                                              1.过期时间设置(Expires 字段) 2.设置域(domain),指定 cookie 在哪个域下可以被接受 3.设置路径(path),指定 cookie 在当前主机下哪些路径可以接受 Cookie 4.设置不能通过 javascript 访问 Cookie。(HttpOnly字段) 5.设置一段时间过期。(Max-Age) 6.设置 secure 字段 7.设置 someSite ,它有三个可选值 None、strict、Lax

                                              session

                                              session是一种服务度机制,类似散列表结构来存储用户数据 浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid sessionid唯一标识这个session 服务器响应时把sessionid发送给浏览器 浏览器第二次向服务器发送请求时就会携带这个sessionid 服务器通过这个id找到对应的session获取用户数据

                                              TIP

                                              session保存在服务器,cookie保存在客户端 session中保存的时对象,cookie保存的是字符串 session不能区分路径,同一个用户访问一个网站期间,所有的session在任何一个地方都可以访问 cookie如果设置路径,则在某些地方不能访问 session需要借助cookie才能正常工作,如果禁用cookie,session则失效 客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器

                                              localstorage and SessionStorage(5101KB)

                                              失效时间 sessionStorage的失效时间为当前会话是否被关闭, 如果当前会话中存储有key和value,会话关闭数据则消失,所以我们可以得到结论,sessionStorage的失效取决于会话 localStorage的失效时间为用户手动删除,相比sessionStorage的

                                              + + \ No newline at end of file diff --git "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\350\267\250\345\237\237.html" "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\350\267\250\345\237\237.html" index 186fbb8..6c555ee 100644 --- "a/\351\235\242\350\257\225/\345\211\215\347\253\257/\350\267\250\345\237\237.html" +++ "b/\351\235\242\350\257\225/\345\211\215\347\253\257/\350\267\250\345\237\237.html" @@ -6,8 +6,8 @@ 怀谷 | 怀谷 - - + + -
                                              Skip to content
                                              On this page

                                              跨域

                                              跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的

                                              解决方案如下

                                              jsonp

                                              利用了 script 不受同源策略的限制

                                              缺点:只能 get 方式,易受到 XSS攻击

                                              CORS(Cross-Origin Resource Sharing),跨域资源共享

                                              当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;

                                              后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;

                                              浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错

                                              缺点:忽略 cookie,浏览器版本有一定要求

                                              代理跨域请求(Nginx)

                                              前端向发送请求,经过代理,请求需要的服务器资源

                                              缺点:需要额外的代理服务器

                                              基于websocket

                                              websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求

                                              缺点:浏览器一定版本要求,服务器需要支持 websocket 协议

                                              - - +
                                              Skip to content
                                              On this page

                                              跨域

                                              跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的

                                              解决方案如下

                                              jsonp

                                              利用了 script 不受同源策略的限制

                                              缺点:只能 get 方式,易受到 XSS攻击

                                              CORS(Cross-Origin Resource Sharing),跨域资源共享

                                              当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;

                                              后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;

                                              浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错

                                              缺点:忽略 cookie,浏览器版本有一定要求

                                              代理跨域请求(Nginx)

                                              前端向发送请求,经过代理,请求需要的服务器资源

                                              缺点:需要额外的代理服务器

                                              基于websocket

                                              websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求

                                              缺点:浏览器一定版本要求,服务器需要支持 websocket 协议

                                              + + \ No newline at end of file