cainiaoblog 23.2.171
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CNAME +1 -0
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
- package/README.md +8 -0
- package/about/index.html +54 -0
- package/ads.txt +1 -0
- package/app/manual.html +104 -0
- package/appConfigs/config +1 -0
- package/archives/2018/index.html +48 -0
- package/archives/2019/index.html +48 -0
- package/archives/2019/page/2/index.html +48 -0
- package/archives/2020/index.html +48 -0
- package/archives/2021/index.html +48 -0
- package/archives/2022/index.html +48 -0
- package/archives/2023/index.html +48 -0
- package/archives/index.html +48 -0
- package/archives/page/2/index.html +48 -0
- package/archives/page/3/index.html +48 -0
- package/article/10047.html +148 -0
- package/article/10164.html +64 -0
- package/article/10624.html +436 -0
- package/article/10745.html +586 -0
- package/article/11674.html +71 -0
- package/article/11939.html +72 -0
- package/article/12238.html +86 -0
- package/article/1230.html +533 -0
- package/article/13265.html +69 -0
- package/article/13823.html +78 -0
- package/article/14125.html +72 -0
- package/article/14192.html +561 -0
- package/article/14375.html +85 -0
- package/article/14744.html +83 -0
- package/article/14936.html +451 -0
- package/article/1518.html +250 -0
- package/article/15428.html +71 -0
- package/article/15518.html +288 -0
- package/article/15569.html +418 -0
- package/article/1566.html +122 -0
- package/article/16017.html +156 -0
- package/article/16947.html +440 -0
- package/article/17096.html +82 -0
- package/article/17246.html +89 -0
- package/article/17575.html +350 -0
- package/article/179.html +757 -0
- package/article/18039.html +233 -0
- package/article/18071.html +375 -0
- package/article/18142.html +71 -0
- package/article/19909.html +160 -0
- package/article/20014.html +89 -0
- package/article/20021.html +389 -0
- package/article/20037.html +280 -0
- package/article/20056.html +95 -0
- package/article/20093.html +404 -0
- package/article/2021.html +607 -0
- package/article/20459.html +115 -0
- package/article/20613.html +263 -0
- package/article/20635.html +71 -0
- package/article/21317.html +71 -0
- package/article/21320.html +90 -0
- package/article/21782.html +548 -0
- package/article/22230.html +435 -0
- package/article/22237.html +347 -0
- package/article/22398.html +109 -0
- package/article/22422.html +270 -0
- package/article/22565.html +300 -0
- package/article/23046.html +250 -0
- package/article/23083.html +215 -0
- package/article/23195.html +297 -0
- package/article/23301.html +835 -0
- package/article/23589.html +285 -0
- package/article/23655.html +338 -0
- package/article/23864.html +76 -0
- package/article/23914.html +96 -0
- package/article/24169.html +135 -0
- package/article/24581.html +349 -0
- package/article/2475.html +500 -0
- package/article/24826.html +77 -0
- package/article/24924.html +247 -0
- package/article/25164.html +1495 -0
- package/article/25318.html +394 -0
- package/article/25710.html +1129 -0
- package/article/25734.html +83 -0
- package/article/26083.html +174 -0
- package/article/26147.html +283 -0
- package/article/26291.html +110 -0
- package/article/26354.html +71 -0
- package/article/26624.html +145 -0
- package/article/26639.html +298 -0
- package/article/26850.html +138 -0
- package/article/26940.html +258 -0
- package/article/27796.html +190 -0
- package/article/27800.html +161 -0
- package/article/28963.html +159 -0
- package/article/28976.html +247 -0
- package/article/29042.html +72 -0
- package/article/29596.html +81 -0
- package/article/29619.html +183 -0
- package/article/29623.html +329 -0
- package/article/29829.html +205 -0
- package/article/29abbd1c.html +112 -0
- package/article/30215.html +178 -0
- package/article/30552.html +78 -0
- package/article/30818.html +201 -0
- package/article/31330.html +364 -0
- package/article/3154.html +577 -0
- package/article/31695.html +348 -0
- package/article/31826.html +71 -0
- package/article/31843.html +132 -0
- package/article/32280.html +212 -0
- package/article/32431.html +74 -0
- package/article/32443.html +72 -0
- package/article/32732.html +122 -0
- package/article/3286.html +251 -0
- package/article/32960.html +198 -0
- package/article/33713.html +72 -0
- package/article/33899.html +615 -0
- package/article/34351.html +74 -0
- package/article/34372.html +89 -0
- package/article/34410.html +74 -0
- package/article/34431.html +118 -0
- package/article/3447.html +75 -0
- package/article/34474.html +142 -0
- package/article/34871.html +147 -0
- package/article/35397.html +175 -0
- package/article/3544.html +199 -0
- package/article/35503.html +115 -0
- package/article/35624.html +84 -0
- package/article/35697.html +384 -0
- package/article/35863.html +73 -0
- package/article/36037.html +253 -0
- package/article/36118.html +71 -0
- package/article/3621.html +119 -0
- package/article/36251.html +296 -0
- package/article/36642.html +352 -0
- package/article/37102.html +763 -0
- package/article/37336.html +351 -0
- package/article/37351.html +89 -0
- package/article/3760.html +294 -0
- package/article/37749.html +75 -0
- package/article/37789.html +83 -0
- package/article/38005.html +765 -0
- package/article/38009.html +284 -0
- package/article/38269.html +194 -0
- package/article/38344.html +88 -0
- package/article/38359.html +334 -0
- package/article/38423.html +379 -0
- package/article/38530.html +213 -0
- package/article/38743.html +268 -0
- package/article/38753.html +204 -0
- package/article/38881.html +71 -0
- package/article/39087.html +414 -0
- package/article/39309.html +84 -0
- package/article/39486.html +74 -0
- package/article/39637.html +306 -0
- package/article/39839.html +72 -0
- package/article/39937.html +152 -0
- package/article/39970.html +71 -0
- package/article/402.html +559 -0
- package/article/40698.html +71 -0
- package/article/40811.html +71 -0
- package/article/40964.html +462 -0
- package/article/41011.html +322 -0
- package/article/41152.html +78 -0
- package/article/41696.html +71 -0
- package/article/41717.html +281 -0
- package/article/41777.html +149 -0
- package/article/419.html +985 -0
- package/article/4233.html +136 -0
- package/article/4292.html +86 -0
- package/article/43302.html +96 -0
- package/article/43397.html +106 -0
- package/article/43724.html +281 -0
- package/article/43999.html +224 -0
- package/article/44426.html +77 -0
- package/article/44964.html +137 -0
- package/article/45004.html +123 -0
- package/article/4510.html +83 -0
- package/article/45156.html +320 -0
- package/article/45157.html +52 -0
- package/article/45267.html +87 -0
- package/article/45641.html +207 -0
- package/article/45960.html +75 -0
- package/article/46100.html +1262 -0
- package/article/46366.html +74 -0
- package/article/46771.html +96 -0
- package/article/46911.html +517 -0
- package/article/46948.html +137 -0
- package/article/46ee4850.html +349 -0
- package/article/47019.html +84 -0
- package/article/47532.html +94 -0
- package/article/4783.html +429 -0
- package/article/47972.html +72 -0
- package/article/48216.html +127 -0
- package/article/48252.html +185 -0
- package/article/48520.html +74 -0
- package/article/48722.html +75 -0
- package/article/48807.html +99 -0
- package/article/49126.html +323 -0
- package/article/50001.html +88 -0
- package/article/50058.html +151 -0
- package/article/50343.html +410 -0
- package/article/50510.html +82 -0
- package/article/51082.html +98 -0
- package/article/51677.html +111 -0
- package/article/5204.html +1085 -0
- package/article/52500.html +538 -0
- package/article/52689.html +259 -0
- package/article/52877.html +569 -0
- package/article/53125.html +191 -0
- package/article/53428.html +251 -0
- package/article/53524.html +74 -0
- package/article/53698.html +322 -0
- package/article/53803e6.html +93 -0
- package/article/53924.html +291 -0
- package/article/53962.html +253 -0
- package/article/54006.html +71 -0
- package/article/54018.html +88 -0
- package/article/54161.html +83 -0
- package/article/54178.html +69 -0
- package/article/54258.html +327 -0
- package/article/54295.html +214 -0
- package/article/54313.html +1976 -0
- package/article/54351.html +90 -0
- package/article/54604.html +80 -0
- package/article/54632.html +71 -0
- package/article/54912.html +756 -0
- package/article/54918.html +129 -0
- package/article/55119.html +136 -0
- package/article/55756.html +118 -0
- package/article/55769.html +136 -0
- package/article/55870.html +161 -0
- package/article/56139.html +92 -0
- package/article/56557.html +69 -0
- package/article/56604.html +69 -0
- package/article/56816.html +266 -0
- package/article/56926.html +153 -0
- package/article/57747.html +409 -0
- package/article/57965.html +475 -0
- package/article/58816.html +78 -0
- package/article/59059.html +435 -0
- package/article/59095.html +350 -0
- package/article/59349.html +244 -0
- package/article/59402.html +216 -0
- package/article/59448.html +55 -0
- package/article/59870.html +94 -0
- package/article/59877.html +208 -0
- package/article/5dbb6f41.html +86 -0
- package/article/6008.html +75 -0
- package/article/60327.html +126 -0
- package/article/6035.html +76 -0
- package/article/60428.html +71 -0
- package/article/60544.html +128 -0
- package/article/61319.html +95 -0
- package/article/61367.html +93 -0
- package/article/624d1918.html +292 -0
- package/article/62543.html +71 -0
- package/article/62887.html +169 -0
- package/article/63074.html +120 -0
- package/article/63266.html +311 -0
- package/article/63351.html +74 -0
- package/article/63542.html +104 -0
- package/article/63824.html +275 -0
- package/article/64051.html +653 -0
- package/article/64189b69.html +72 -0
- package/article/64354.html +75 -0
- package/article/64869.html +79 -0
- package/article/64923.html +596 -0
- package/article/65128.html +95 -0
- package/article/65295.html +79 -0
- package/article/6888.html +75 -0
- package/article/7065.html +84 -0
- package/article/7455.html +85 -0
- package/article/7a3ef8f.html +315 -0
- package/article/8140.html +188 -0
- package/article/8190.html +85 -0
- package/article/8225.html +78 -0
- package/article/84c9ccd6.html +159 -0
- package/article/8f9a9ae3.html +82 -0
- package/article/9174.html +73 -0
- package/article/9738.html +294 -0
- package/article/a4145266.html +71 -0
- package/article/bedea419.html +72 -0
- package/article/bf7e7421.html +78 -0
- package/article/c1867fbf.html +103 -0
- package/article/c5576490.html +70 -0
- package/article/dcb0db28.html +76 -0
- package/article/fc3b727a.html +79 -0
- package/atom.xml +445 -0
- package/baidusitemap.xml +1079 -0
- package/blocks/dns.txt +264 -0
- package/blocks/filter.txt +1070 -0
- package/blocks/script.js +42 -0
- package/categories/CDN/index.html +48 -0
- package/categories/IDE/index.html +48 -0
- package/categories/git/index.html +48 -0
- package/categories/hexo/index.html +48 -0
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
- package/categories//345/210/206/344/272/253/index.html +48 -0
- package/categories//345/211/215/347/253/257/index.html +48 -0
- package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
- package/categories//345/215/232/345/256/242/index.html +48 -0
- package/categories//345/267/245/345/205/267/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
- package/categories//346/255/243/345/210/231/index.html +48 -0
- package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//347/256/227/346/263/225/index.html +48 -0
- package/categories//350/265/204/350/256/257/index.html +48 -0
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
- package/cdn/css/font-awesome.min.css +4 -0
- package/cdn/css/grids-responsive-min.css +7 -0
- package/cdn/css/normalize.css +349 -0
- package/cdn/css/pure-min.css +11 -0
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +2671 -0
- package/cdn/fonts/fontawesome-webfont.ttf +0 -0
- package/cdn/fonts/fontawesome-webfont.woff +0 -0
- package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
- package/cdn/js/Valine.min.js +17 -0
- package/cdn/js/canvas-nest.js +1 -0
- package/cdn/js/clipboard.min.js +7 -0
- package/cdn/js/crypto-js.js +25 -0
- package/cdn/js/jquery.min.js +2 -0
- package/css/default.css +1144 -0
- package/css/donate.css +338 -0
- package/css/hbe.style.css +749 -0
- package/css/style.css +2095 -0
- package/donate/index.html +39 -0
- package/google917dcf72f6e5c7f5.html +1 -0
- package/guestbook/index.html +68 -0
- package/hosts/ads.txt +149 -0
- package/hosts/flash.txt +9 -0
- package/hosts/github.txt +6 -0
- package/hosts/google.txt +16936 -0
- package/hosts/winrar.txt +2 -0
- package/img/alipay.svg +46 -0
- package/img/bitcoin.svg +135 -0
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +1 -0
- package/img/like.svg +1 -0
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +63 -0
- package/img/upy_logo.svg +59 -0
- package/img/wechat.svg +49 -0
- package/index.html +48 -0
- package/jd_root.txt +1 -0
- package/js/codeblock-resizer.js +51 -0
- package/js/dark.js +12 -0
- package/js/donate.js +87 -0
- package/js/fixedPage.js +106 -0
- package/js/gitment.browser.js +3751 -0
- package/js/search.js +86 -0
- package/js/share.js +60 -0
- package/js/smartresize.js +32 -0
- package/js/totop.js +12 -0
- package/kankan/index.html +77 -0
- package/lib/hbe.js +293 -0
- package/package.json +25 -0
- package/page/10/index.html +49 -0
- package/page/11/index.html +59 -0
- package/page/12/index.html +67 -0
- package/page/13/index.html +63 -0
- package/page/14/index.html +66 -0
- package/page/15/index.html +60 -0
- package/page/16/index.html +60 -0
- package/page/17/index.html +62 -0
- package/page/18/index.html +61 -0
- package/page/19/index.html +58 -0
- package/page/2/index.html +48 -0
- package/page/20/index.html +57 -0
- package/page/21/index.html +61 -0
- package/page/22/index.html +55 -0
- package/page/23/index.html +64 -0
- package/page/24/index.html +60 -0
- package/page/25/index.html +58 -0
- package/page/26/index.html +48 -0
- package/page/27/index.html +58 -0
- package/page/3/index.html +48 -0
- package/page/4/index.html +48 -0
- package/page/5/index.html +51 -0
- package/page/6/index.html +51 -0
- package/page/7/index.html +51 -0
- package/page/8/index.html +53 -0
- package/page/9/index.html +48 -0
- package/randomcall/README.html +1 -0
- package/randomcall/lucker.html +290 -0
- package/randomcall/lucky.png +0 -0
- package/robots.txt +22 -0
- package/search.xml +6740 -0
- package/sitemap.xml +2669 -0
- package/tags//345/216/237/345/210/233/index.html +48 -0
- package/tags//345/250/261/344/271/220/index.html +48 -0
- package/tags//346/211/213/345/206/231/index.html +48 -0
- package/tags//347/226/253/346/203/205/index.html +48 -0
- package/tags//350/275/254/350/275/275/index.html +48 -0
- package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
- package/v.html +90 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>高频面试题深入解析/ 周刊 04 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">高频面试题深入解析/ 周刊 04</h1><div class="post-meta"><span class="date">2019-10-03</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%88%86%E4%BA%AB/">分享 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 2.3k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 9</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/22422.html#vcomment"><span class="waline-comment-count" data-path="/article/22422.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://github.com/YvetteLau/Blog/issues/34</code></p>
|
|
20
|
+
<span id="more"></span>
|
|
21
|
+
<h3 id="关于【Step-By-Step】"><a href="#关于【Step-By-Step】" class="headerlink" title="关于【Step-By-Step】"></a>关于【Step-By-Step】</h3><blockquote>
|
|
22
|
+
<p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step">Step-By-Step</a> (点击进入项目) 是我于 <code>2019-05-20</code> 开始的一个项目,每个工作日发布一道面试题。<br>每个周末我会仔细阅读大家的答案,整理最一份较优答案出来,因本人水平有限,有误的地方,大家及时指正。</p>
|
|
23
|
+
</blockquote>
|
|
24
|
+
<hr>
|
|
25
|
+
<blockquote>
|
|
26
|
+
<p>本周面试题一览:</p>
|
|
27
|
+
</blockquote>
|
|
28
|
+
<ul>
|
|
29
|
+
<li>什么是闭包?闭包的作用是什么?</li>
|
|
30
|
+
<li>实现 Promise.all 方法</li>
|
|
31
|
+
<li>异步加载 js 脚本的方法有哪些?</li>
|
|
32
|
+
<li>请实现一个 flattenDeep 函数,把嵌套的数组扁平化</li>
|
|
33
|
+
<li>可迭代对象有什么特点?</li>
|
|
34
|
+
</ul>
|
|
35
|
+
<h3 id="15-什么是闭包?闭包的作用是什么?"><a href="#15-什么是闭包?闭包的作用是什么?" class="headerlink" title="15. 什么是闭包?闭包的作用是什么?"></a>15. 什么是闭包?闭包的作用是什么?</h3><h4 id="什么是闭包?"><a href="#什么是闭包?" class="headerlink" title="什么是闭包?"></a>什么是闭包?</h4><p>闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包最常用的方式就是在一个函数内部创建另一个函数。</p>
|
|
36
|
+
<h4 id="创建一个闭包"><a href="#创建一个闭包" class="headerlink" title="创建一个闭包"></a>创建一个闭包</h4><pre><code>functionfoo() {
|
|
37
|
+
var a =2;
|
|
38
|
+
returnfunctionfn() {
|
|
39
|
+
console.log(a);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
let func =foo();
|
|
43
|
+
func(); //输出2
|
|
44
|
+
</code></pre>
|
|
45
|
+
<p>闭包使得函数可以继续访问定义时的词法作用域。拜 fn 所赐,在 foo() 执行后,foo 内部作用域不会被销毁。</p>
|
|
46
|
+
<p>无论通过何种手段将内部函数传递到所在的词法作用域之外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。如:</p>
|
|
47
|
+
<pre><code>functionfoo() {
|
|
48
|
+
var a =2;
|
|
49
|
+
functioninner() {
|
|
50
|
+
console.log(a);
|
|
51
|
+
}
|
|
52
|
+
outer(inner);
|
|
53
|
+
}
|
|
54
|
+
functionouter(fn){
|
|
55
|
+
fn(); //闭包
|
|
56
|
+
}
|
|
57
|
+
foo();
|
|
58
|
+
</code></pre>
|
|
59
|
+
<h4 id="闭包的作用"><a href="#闭包的作用" class="headerlink" title="闭包的作用"></a>闭包的作用</h4><ol>
|
|
60
|
+
<li><p>能够访问函数定义时所在的词法作用域(阻止其被回收)。</p>
|
|
61
|
+
</li>
|
|
62
|
+
<li><p>私有化变量</p>
|
|
63
|
+
<p> functionbase() {<br> let x =10; //私有变量return {<br> getX:function() {<br> return x;<br> }<br> }<br> }<br> let obj =base();<br> console.log(obj.getX()); //10</p>
|
|
64
|
+
</li>
|
|
65
|
+
<li><p>模拟块级作用域</p>
|
|
66
|
+
<p> var a = [];<br> for (var i =0; i <10; i++) {<br> a[i] = (function(j){<br> returnfunction () {<br> console.log(j);<br> }<br> })(i);<br> }<br> a<a href="">6</a>; // 6</p>
|
|
67
|
+
</li>
|
|
68
|
+
<li><p>创建模块</p>
|
|
69
|
+
<p> functioncoolModule() {<br> let name =’Yvette’;<br> let age =20;<br> functionsayName() {<br> console.log(name);<br> }<br> functionsayAge() {<br> console.log(age);<br> }<br> return {<br> sayName,<br> sayAge<br> }<br> }<br> let info =coolModule();<br> info.sayName(); //‘Yvette’</p>
|
|
70
|
+
</li>
|
|
71
|
+
</ol>
|
|
72
|
+
<p>模块模式具有两个必备的条件(来自《你不知道的JavaScript》)</p>
|
|
73
|
+
<ul>
|
|
74
|
+
<li>必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)</li>
|
|
75
|
+
<li>封闭函数必须返回至少<strong>一个</strong>内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态。</li>
|
|
76
|
+
</ul>
|
|
77
|
+
<h4 id="闭包的缺点"><a href="#闭包的缺点" class="headerlink" title="闭包的缺点"></a>闭包的缺点</h4><p>闭包会导致函数的变量一直保存在内存中,过多的闭包可能会导致内存泄漏</p>
|
|
78
|
+
<h3 id="16-实现-Promise-all-方法"><a href="#16-实现-Promise-all-方法" class="headerlink" title="16. 实现 Promise.all 方法"></a>16. 实现 Promise.all 方法</h3><p>在实现 Promise.all 方法之前,我们首先要知道 Promise.all 的功能和特点,因为在清楚了 Promise.all 功能和特点的情况下,我们才能进一步去写实现。</p>
|
|
79
|
+
<h4 id="Promise-all-功能"><a href="#Promise-all-功能" class="headerlink" title="Promise.all 功能"></a>Promise.all 功能</h4><p><code>Promise.all(iterable)</code> 返回一个新的 Promise 实例。此实例在 <code>iterable</code> 参数内所有的 <code>promise</code> 都 <code>fulfilled</code> 或者参数中不包含 <code>promise</code> 时,状态变成 <code>fulfilled</code>;如果参数中 <code>promise</code> 有一个失败<code>rejected</code>,此实例回调失败,失败原因的是第一个失败 <code>promise</code> 的返回结果。</p>
|
|
80
|
+
<pre><code>let p =Promise.all([p1, p2, p3]);
|
|
81
|
+
</code></pre>
|
|
82
|
+
<p>p的状态由 p1,p2,p3决定,分成以下;两种情况:</p>
|
|
83
|
+
<p>(1)只有p1、p2、p3的状态都变成 <code>fulfilled</code>,p的状态才会变成 <code>fulfilled</code>,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。</p>
|
|
84
|
+
<p>(2)只要p1、p2、p3之中有一个被 <code>rejected</code>,p的状态就变成 <code>rejected</code>,此时第一个被reject的实例的返回值,会传递给p的回调函数。</p>
|
|
85
|
+
<h4 id="Promise-all-的特点"><a href="#Promise-all-的特点" class="headerlink" title="Promise.all 的特点"></a>Promise.all 的特点</h4><blockquote>
|
|
86
|
+
<p>Promise.all 的返回值是一个 promise 实例</p>
|
|
87
|
+
</blockquote>
|
|
88
|
+
<ul>
|
|
89
|
+
<li>如果传入的参数为空的可迭代对象,<code>Promise.all</code> 会 <strong>同步</strong> 返回一个已完成状态的 <code>promise</code></li>
|
|
90
|
+
<li>如果传入的参数中不包含任何 promise,<code>Promise.all</code> 会 <strong>异步</strong> 返回一个已完成状态的 <code>promise</code></li>
|
|
91
|
+
<li>其它情况下,<code>Promise.all</code> 返回一个 <strong>处理中(pending)</strong> 状态的 <code>promise</code>.</li>
|
|
92
|
+
</ul>
|
|
93
|
+
<blockquote>
|
|
94
|
+
<p>Promise.all 返回的 promise 的状态</p>
|
|
95
|
+
</blockquote>
|
|
96
|
+
<ul>
|
|
97
|
+
<li>如果传入的参数中的 promise 都变成完成状态,<code>Promise.all</code> 返回的 <code>promise</code> 异步地变为完成。</li>
|
|
98
|
+
<li>如果传入的参数中,有一个 <code>promise</code> 失败,<code>Promise.all</code> 异步地将失败的那个结果给失败状态的回调函数,而不管其它 <code>promise</code> 是否完成</li>
|
|
99
|
+
<li>在任何情况下,<code>Promise.all</code> 返回的 <code>promise</code> 的完成状态的结果都是一个数组</li>
|
|
100
|
+
</ul>
|
|
101
|
+
<h4 id="Promise-all-实现"><a href="#Promise-all-实现" class="headerlink" title="Promise.all 实现"></a>Promise.all 实现</h4><pre><code>Promise.all=function (promises) {
|
|
102
|
+
returnnewPromise((resolve, reject) => {
|
|
103
|
+
//Array.from 将可迭代对象转换成数组
|
|
104
|
+
promises =Array.from(promises);
|
|
105
|
+
if (promises.length===0) {
|
|
106
|
+
resolve([]);
|
|
107
|
+
} else {
|
|
108
|
+
let result = [];
|
|
109
|
+
let index =0;
|
|
110
|
+
for (let i =0; i <promises.length; i++ ) {
|
|
111
|
+
//考虑到 i 可能是 thenable 对象也可能是普通值Promise.resolve(promises[i]).then(data=> {
|
|
112
|
+
result[i] = data;
|
|
113
|
+
if (++index ===promises.length) {
|
|
114
|
+
//所有的 promises 状态都是 fulfilled,promise.all返回的实例才变成 fulfilled 态resolve(result);
|
|
115
|
+
}
|
|
116
|
+
}, err=> {
|
|
117
|
+
reject(err);
|
|
118
|
+
return;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
</code></pre>
|
|
125
|
+
<h3 id="17-异步加载-js-脚本的方法有哪些?"><a href="#17-异步加载-js-脚本的方法有哪些?" class="headerlink" title="17. 异步加载 js 脚本的方法有哪些?"></a>17. 异步加载 js 脚本的方法有哪些?</h3><h4 id="lt-script-gt-标签中增加-async-html5-或者-defer-html4-属性-脚本就会异步加载。"><a href="#lt-script-gt-标签中增加-async-html5-或者-defer-html4-属性-脚本就会异步加载。" class="headerlink" title="<script> 标签中增加 async(html5) 或者 defer(html4) 属性,脚本就会异步加载。"></a><code><script></code> 标签中增加 <code>async</code>(html5) 或者 <code>defer</code>(html4) 属性,脚本就会异步加载。</h4><pre><code><script src="../XXX.js" defer></script>
|
|
126
|
+
</code></pre>
|
|
127
|
+
<p><code>defer</code> 和 <code>async</code> 的区别在于:</p>
|
|
128
|
+
<ul>
|
|
129
|
+
<li><code>defer</code> 要等到整个页面在内存中正常渲染结束(DOM 结构完全生成,以及其他脚本执行完成),在window.onload 之前执行;</li>
|
|
130
|
+
<li><code>async</code> 一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。</li>
|
|
131
|
+
<li>如果有多个 <code>defer</code> 脚本,会按照它们在页面出现的顺序加载</li>
|
|
132
|
+
<li>多个 <code>async</code> 脚本不能保证加载顺序</li>
|
|
133
|
+
</ul>
|
|
134
|
+
<h4 id="动态创建-script-标签"><a href="#动态创建-script-标签" class="headerlink" title="动态创建 script 标签"></a>动态创建 <code>script</code> 标签</h4><p>动态创建的 <code>script</code> ,设置 <code>src</code> 并不会开始下载,而是要添加到文档中,JS文件才会开始下载。</p>
|
|
135
|
+
<pre><code>let script =document.createElement('script');
|
|
136
|
+
script.src='XXX.js';
|
|
137
|
+
// 添加到html文件中才会开始下载document.body.append(script);
|
|
138
|
+
</code></pre>
|
|
139
|
+
<h4 id="XHR-异步加载JS"><a href="#XHR-异步加载JS" class="headerlink" title="XHR 异步加载JS"></a>XHR 异步加载JS</h4><pre><code>let xhr =newXMLHttpRequest();
|
|
140
|
+
xhr.open("get", "js/xxx.js",true);
|
|
141
|
+
xhr.send();
|
|
142
|
+
xhr.onreadystatechange=function() {
|
|
143
|
+
if (xhr.readyState==4&&xhr.status==200) {
|
|
144
|
+
eval(xhr.responseText);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
</code></pre>
|
|
148
|
+
<h3 id="18-请实现一个-flattenDeep-函数,把嵌套的数组扁平化"><a href="#18-请实现一个-flattenDeep-函数,把嵌套的数组扁平化" class="headerlink" title="18. 请实现一个 flattenDeep 函数,把嵌套的数组扁平化"></a>18. 请实现一个 flattenDeep 函数,把嵌套的数组扁平化</h3><h4 id="利用-Array-prototype-flat"><a href="#利用-Array-prototype-flat" class="headerlink" title="利用 Array.prototype.flat"></a>利用 Array.prototype.flat</h4><p>ES6 为数组实例新增了 <code>flat</code> 方法,用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数组没有影响。</p>
|
|
149
|
+
<p><code>flat</code> 默认只会 “拉平” 一层,如果想要 “拉平” 多层的嵌套数组,需要给 <code>flat</code> 传递一个整数,表示想要拉平的层数。</p>
|
|
150
|
+
<pre><code>functionflattenDeep(arr, deepLength) {
|
|
151
|
+
returnarr.flat(deepLength);
|
|
152
|
+
}
|
|
153
|
+
console.log(flattenDeep([1, [2, [3, [4]], 5]], 3));
|
|
154
|
+
</code></pre>
|
|
155
|
+
<p>当传递的整数大于数组嵌套的层数时,会将数组拉平为一维数组,JS能表示的最大数字为 <code>Math.pow(2, 53) - 1</code>,因此我们可以这样定义 <code>flattenDeep</code> 函数</p>
|
|
156
|
+
<pre><code>functionflattenDeep(arr) {
|
|
157
|
+
//当然,大多时候我们并不会有这么多层级的嵌套returnarr.flat(Math.pow(2,53) -1);
|
|
158
|
+
}
|
|
159
|
+
console.log(flattenDeep([1, [2, [3, [4]], 5]]));
|
|
160
|
+
</code></pre>
|
|
161
|
+
<h4 id="利用-reduce-和-concat"><a href="#利用-reduce-和-concat" class="headerlink" title="利用 reduce 和 concat"></a>利用 reduce 和 concat</h4><pre><code>functionflattenDeep(arr){
|
|
162
|
+
returnarr.reduce((acc, val) =>Array.isArray(val) ?acc.concat(flattenDeep(val)) :acc.concat(val), []);
|
|
163
|
+
}
|
|
164
|
+
console.log(flattenDeep([1, [2, [3, [4]], 5]]));
|
|
165
|
+
</code></pre>
|
|
166
|
+
<h4 id="使用-stack-无限反嵌套多层嵌套数组"><a href="#使用-stack-无限反嵌套多层嵌套数组" class="headerlink" title="使用 stack 无限反嵌套多层嵌套数组"></a>使用 stack 无限反嵌套多层嵌套数组</h4><pre><code>functionflattenDeep(input) {
|
|
167
|
+
conststack= [...input];
|
|
168
|
+
constres= [];
|
|
169
|
+
while (stack.length) {
|
|
170
|
+
// 使用 pop 从 stack 中取出并移除值constnext=stack.pop();
|
|
171
|
+
if (Array.isArray(next)) {
|
|
172
|
+
// 使用 push 送回内层数组中的元素,不会改动原始输入 original inputstack.push(...next);
|
|
173
|
+
} else {
|
|
174
|
+
res.push(next);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// 使用 reverse 恢复原数组的顺序returnres.reverse();
|
|
178
|
+
}
|
|
179
|
+
console.log(flattenDeep([1, [2, [3, [4]], 5]]));
|
|
180
|
+
</code></pre>
|
|
181
|
+
<h3 id="19-可迭代对象有什么特点"><a href="#19-可迭代对象有什么特点" class="headerlink" title="19. 可迭代对象有什么特点"></a>19. 可迭代对象有什么特点</h3><p>ES6 规定,默认的 <code>Iterator</code> 接口部署在数据结构的 <code>Symbol.iterator</code> 属性,换个角度,也可以认为,一个数据结构只要具有 <code>Symbol.iterator</code> 属性(<code>Symbol.iterator</code> 方法对应的是遍历器生成函数,返回的是一个遍历器对象),那么就可以其认为是可迭代的。</p>
|
|
182
|
+
<h4 id="可迭代对象的特点"><a href="#可迭代对象的特点" class="headerlink" title="可迭代对象的特点"></a>可迭代对象的特点</h4><ul>
|
|
183
|
+
<li><p>具有 <code>Symbol.iterator</code> 属性,<code>Symbol.iterator()</code> 返回的是一个遍历器对象</p>
|
|
184
|
+
</li>
|
|
185
|
+
<li><p>可以使用 <code>for ... of</code> 进行循环</p>
|
|
186
|
+
<p> let arry = [1, 2, 3, 4];<br> let iter = arry<a href="">Symbol.iterator</a>;<br> console.log(iter.next()); //{ value: 1, done: false }console.log(iter.next()); //{ value: 2, done: false }console.log(iter.next()); //{ value: 3, done: false }</p>
|
|
187
|
+
</li>
|
|
188
|
+
</ul>
|
|
189
|
+
<h4 id="原生具有-Iterator-接口的数据结构:"><a href="#原生具有-Iterator-接口的数据结构:" class="headerlink" title="原生具有 Iterator 接口的数据结构:"></a>原生具有 <code>Iterator</code> 接口的数据结构:</h4><ul>
|
|
190
|
+
<li>Array</li>
|
|
191
|
+
<li>Map</li>
|
|
192
|
+
<li>Set</li>
|
|
193
|
+
<li>String</li>
|
|
194
|
+
<li>TypedArray</li>
|
|
195
|
+
<li>函数的 arguments 对象</li>
|
|
196
|
+
<li>NodeList 对象</li>
|
|
197
|
+
</ul>
|
|
198
|
+
<h4 id="自定义一个可迭代对象"><a href="#自定义一个可迭代对象" class="headerlink" title="自定义一个可迭代对象"></a>自定义一个可迭代对象</h4><p>上面我们说,一个对象只有具有正确的 <code>Symbol.iterator</code> 属性,那么其就是可迭代的,因此,我们可以通过给对象新增 <code>Symbol.iterator</code> 使其可迭代。</p>
|
|
199
|
+
<pre><code>let obj = {
|
|
200
|
+
name:"Yvette",
|
|
201
|
+
age:18,
|
|
202
|
+
job:'engineer',
|
|
203
|
+
*[Symbol.iterator]() {
|
|
204
|
+
constself=this;
|
|
205
|
+
constkeys=Object.keys(self);
|
|
206
|
+
for (let index =0; index <keys.length; index++) {
|
|
207
|
+
yield self[keys[index]];//yield表达式仅能使用在 Generator 函数中
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
for (var key of obj) {
|
|
213
|
+
console.log(key); //Yvette 18 engineer
|
|
214
|
+
}
|
|
215
|
+
</code></pre>
|
|
216
|
+
<h3 id="参考文章:"><a href="#参考文章:" class="headerlink" title="参考文章:"></a>参考文章:</h3><p>[1] <a target="_blank" rel="noopener" href="http://www.zhufengpeixun.cn/main/course/index.html">珠峰架构课(墙裂推荐)</a></p>
|
|
217
|
+
<p>[1] <a target="_blank" rel="noopener" href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/all">MDN Promise.all</a></p>
|
|
218
|
+
<p>[2] <a target="_blank" rel="noopener" href="http://es6.ruanyifeng.com/#docs/promise#Promise-all">Promise</a></p>
|
|
219
|
+
<p>[3] <a target="_blank" rel="noopener" href="http://es6.ruanyifeng.com/#docs/iterator">Iterator</a></p>
|
|
220
|
+
<p>谢谢各位小伙伴愿意花费宝贵的时间阅读本文,如果本文给了您一点帮助或者是启发,请不要吝啬你的赞和Star,您的肯定是我前进的最大动力。 <a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Blog">https://github.com/YvetteLau/Blog</a></p>
|
|
221
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/22422.html">https://xuehuayu.cn/article/22422.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/38743.html">高频面试题深入解析/ 周刊 05</a><a class="next" href="/article/38359.html">高频面试题深入解析/ 周刊 03</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
222
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
223
|
+
const locale = {
|
|
224
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
225
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
226
|
+
};
|
|
227
|
+
Waline.init({
|
|
228
|
+
el: '#vcomment',
|
|
229
|
+
serverURL: serverURL,
|
|
230
|
+
pageSize: '20',
|
|
231
|
+
visitor: true, // 阅读量统计
|
|
232
|
+
requiredMeta: ['nick', 'mail'],
|
|
233
|
+
emoji: [
|
|
234
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
235
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
236
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
237
|
+
],
|
|
238
|
+
locale,
|
|
239
|
+
pageview: true
|
|
240
|
+
})
|
|
241
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
242
|
+
var val = $(this).val()
|
|
243
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
244
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
245
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
246
|
+
|
|
247
|
+
if (val === 'self') {
|
|
248
|
+
$('#search').html(self)
|
|
249
|
+
var search_path = 'search.xml';
|
|
250
|
+
if (search_path.length == 0) {
|
|
251
|
+
search_path = 'search.xml';
|
|
252
|
+
}
|
|
253
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
254
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
255
|
+
} else if (val === 'baidu') {
|
|
256
|
+
$('#search').html(baidu)
|
|
257
|
+
} else if (val === 'google') {
|
|
258
|
+
$('#search').html(google)
|
|
259
|
+
}
|
|
260
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
261
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
262
|
+
if (cnb) {
|
|
263
|
+
var gxba =document.getElementById('gxba')
|
|
264
|
+
var gaba =document.getElementById('gaba')
|
|
265
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
266
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
267
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
268
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
269
|
+
}
|
|
270
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|