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.
Files changed (401) hide show
  1. package/CNAME +1 -0
  2. package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
  3. package/README.md +8 -0
  4. package/about/index.html +54 -0
  5. package/ads.txt +1 -0
  6. package/app/manual.html +104 -0
  7. package/appConfigs/config +1 -0
  8. package/archives/2018/index.html +48 -0
  9. package/archives/2019/index.html +48 -0
  10. package/archives/2019/page/2/index.html +48 -0
  11. package/archives/2020/index.html +48 -0
  12. package/archives/2021/index.html +48 -0
  13. package/archives/2022/index.html +48 -0
  14. package/archives/2023/index.html +48 -0
  15. package/archives/index.html +48 -0
  16. package/archives/page/2/index.html +48 -0
  17. package/archives/page/3/index.html +48 -0
  18. package/article/10047.html +148 -0
  19. package/article/10164.html +64 -0
  20. package/article/10624.html +436 -0
  21. package/article/10745.html +586 -0
  22. package/article/11674.html +71 -0
  23. package/article/11939.html +72 -0
  24. package/article/12238.html +86 -0
  25. package/article/1230.html +533 -0
  26. package/article/13265.html +69 -0
  27. package/article/13823.html +78 -0
  28. package/article/14125.html +72 -0
  29. package/article/14192.html +561 -0
  30. package/article/14375.html +85 -0
  31. package/article/14744.html +83 -0
  32. package/article/14936.html +451 -0
  33. package/article/1518.html +250 -0
  34. package/article/15428.html +71 -0
  35. package/article/15518.html +288 -0
  36. package/article/15569.html +418 -0
  37. package/article/1566.html +122 -0
  38. package/article/16017.html +156 -0
  39. package/article/16947.html +440 -0
  40. package/article/17096.html +82 -0
  41. package/article/17246.html +89 -0
  42. package/article/17575.html +350 -0
  43. package/article/179.html +757 -0
  44. package/article/18039.html +233 -0
  45. package/article/18071.html +375 -0
  46. package/article/18142.html +71 -0
  47. package/article/19909.html +160 -0
  48. package/article/20014.html +89 -0
  49. package/article/20021.html +389 -0
  50. package/article/20037.html +280 -0
  51. package/article/20056.html +95 -0
  52. package/article/20093.html +404 -0
  53. package/article/2021.html +607 -0
  54. package/article/20459.html +115 -0
  55. package/article/20613.html +263 -0
  56. package/article/20635.html +71 -0
  57. package/article/21317.html +71 -0
  58. package/article/21320.html +90 -0
  59. package/article/21782.html +548 -0
  60. package/article/22230.html +435 -0
  61. package/article/22237.html +347 -0
  62. package/article/22398.html +109 -0
  63. package/article/22422.html +270 -0
  64. package/article/22565.html +300 -0
  65. package/article/23046.html +250 -0
  66. package/article/23083.html +215 -0
  67. package/article/23195.html +297 -0
  68. package/article/23301.html +835 -0
  69. package/article/23589.html +285 -0
  70. package/article/23655.html +338 -0
  71. package/article/23864.html +76 -0
  72. package/article/23914.html +96 -0
  73. package/article/24169.html +135 -0
  74. package/article/24581.html +349 -0
  75. package/article/2475.html +500 -0
  76. package/article/24826.html +77 -0
  77. package/article/24924.html +247 -0
  78. package/article/25164.html +1495 -0
  79. package/article/25318.html +394 -0
  80. package/article/25710.html +1129 -0
  81. package/article/25734.html +83 -0
  82. package/article/26083.html +174 -0
  83. package/article/26147.html +283 -0
  84. package/article/26291.html +110 -0
  85. package/article/26354.html +71 -0
  86. package/article/26624.html +145 -0
  87. package/article/26639.html +298 -0
  88. package/article/26850.html +138 -0
  89. package/article/26940.html +258 -0
  90. package/article/27796.html +190 -0
  91. package/article/27800.html +161 -0
  92. package/article/28963.html +159 -0
  93. package/article/28976.html +247 -0
  94. package/article/29042.html +72 -0
  95. package/article/29596.html +81 -0
  96. package/article/29619.html +183 -0
  97. package/article/29623.html +329 -0
  98. package/article/29829.html +205 -0
  99. package/article/29abbd1c.html +112 -0
  100. package/article/30215.html +178 -0
  101. package/article/30552.html +78 -0
  102. package/article/30818.html +201 -0
  103. package/article/31330.html +364 -0
  104. package/article/3154.html +577 -0
  105. package/article/31695.html +348 -0
  106. package/article/31826.html +71 -0
  107. package/article/31843.html +132 -0
  108. package/article/32280.html +212 -0
  109. package/article/32431.html +74 -0
  110. package/article/32443.html +72 -0
  111. package/article/32732.html +122 -0
  112. package/article/3286.html +251 -0
  113. package/article/32960.html +198 -0
  114. package/article/33713.html +72 -0
  115. package/article/33899.html +615 -0
  116. package/article/34351.html +74 -0
  117. package/article/34372.html +89 -0
  118. package/article/34410.html +74 -0
  119. package/article/34431.html +118 -0
  120. package/article/3447.html +75 -0
  121. package/article/34474.html +142 -0
  122. package/article/34871.html +147 -0
  123. package/article/35397.html +175 -0
  124. package/article/3544.html +199 -0
  125. package/article/35503.html +115 -0
  126. package/article/35624.html +84 -0
  127. package/article/35697.html +384 -0
  128. package/article/35863.html +73 -0
  129. package/article/36037.html +253 -0
  130. package/article/36118.html +71 -0
  131. package/article/3621.html +119 -0
  132. package/article/36251.html +296 -0
  133. package/article/36642.html +352 -0
  134. package/article/37102.html +763 -0
  135. package/article/37336.html +351 -0
  136. package/article/37351.html +89 -0
  137. package/article/3760.html +294 -0
  138. package/article/37749.html +75 -0
  139. package/article/37789.html +83 -0
  140. package/article/38005.html +765 -0
  141. package/article/38009.html +284 -0
  142. package/article/38269.html +194 -0
  143. package/article/38344.html +88 -0
  144. package/article/38359.html +334 -0
  145. package/article/38423.html +379 -0
  146. package/article/38530.html +213 -0
  147. package/article/38743.html +268 -0
  148. package/article/38753.html +204 -0
  149. package/article/38881.html +71 -0
  150. package/article/39087.html +414 -0
  151. package/article/39309.html +84 -0
  152. package/article/39486.html +74 -0
  153. package/article/39637.html +306 -0
  154. package/article/39839.html +72 -0
  155. package/article/39937.html +152 -0
  156. package/article/39970.html +71 -0
  157. package/article/402.html +559 -0
  158. package/article/40698.html +71 -0
  159. package/article/40811.html +71 -0
  160. package/article/40964.html +462 -0
  161. package/article/41011.html +322 -0
  162. package/article/41152.html +78 -0
  163. package/article/41696.html +71 -0
  164. package/article/41717.html +281 -0
  165. package/article/41777.html +149 -0
  166. package/article/419.html +985 -0
  167. package/article/4233.html +136 -0
  168. package/article/4292.html +86 -0
  169. package/article/43302.html +96 -0
  170. package/article/43397.html +106 -0
  171. package/article/43724.html +281 -0
  172. package/article/43999.html +224 -0
  173. package/article/44426.html +77 -0
  174. package/article/44964.html +137 -0
  175. package/article/45004.html +123 -0
  176. package/article/4510.html +83 -0
  177. package/article/45156.html +320 -0
  178. package/article/45157.html +52 -0
  179. package/article/45267.html +87 -0
  180. package/article/45641.html +207 -0
  181. package/article/45960.html +75 -0
  182. package/article/46100.html +1262 -0
  183. package/article/46366.html +74 -0
  184. package/article/46771.html +96 -0
  185. package/article/46911.html +517 -0
  186. package/article/46948.html +137 -0
  187. package/article/46ee4850.html +349 -0
  188. package/article/47019.html +84 -0
  189. package/article/47532.html +94 -0
  190. package/article/4783.html +429 -0
  191. package/article/47972.html +72 -0
  192. package/article/48216.html +127 -0
  193. package/article/48252.html +185 -0
  194. package/article/48520.html +74 -0
  195. package/article/48722.html +75 -0
  196. package/article/48807.html +99 -0
  197. package/article/49126.html +323 -0
  198. package/article/50001.html +88 -0
  199. package/article/50058.html +151 -0
  200. package/article/50343.html +410 -0
  201. package/article/50510.html +82 -0
  202. package/article/51082.html +98 -0
  203. package/article/51677.html +111 -0
  204. package/article/5204.html +1085 -0
  205. package/article/52500.html +538 -0
  206. package/article/52689.html +259 -0
  207. package/article/52877.html +569 -0
  208. package/article/53125.html +191 -0
  209. package/article/53428.html +251 -0
  210. package/article/53524.html +74 -0
  211. package/article/53698.html +322 -0
  212. package/article/53803e6.html +93 -0
  213. package/article/53924.html +291 -0
  214. package/article/53962.html +253 -0
  215. package/article/54006.html +71 -0
  216. package/article/54018.html +88 -0
  217. package/article/54161.html +83 -0
  218. package/article/54178.html +69 -0
  219. package/article/54258.html +327 -0
  220. package/article/54295.html +214 -0
  221. package/article/54313.html +1976 -0
  222. package/article/54351.html +90 -0
  223. package/article/54604.html +80 -0
  224. package/article/54632.html +71 -0
  225. package/article/54912.html +756 -0
  226. package/article/54918.html +129 -0
  227. package/article/55119.html +136 -0
  228. package/article/55756.html +118 -0
  229. package/article/55769.html +136 -0
  230. package/article/55870.html +161 -0
  231. package/article/56139.html +92 -0
  232. package/article/56557.html +69 -0
  233. package/article/56604.html +69 -0
  234. package/article/56816.html +266 -0
  235. package/article/56926.html +153 -0
  236. package/article/57747.html +409 -0
  237. package/article/57965.html +475 -0
  238. package/article/58816.html +78 -0
  239. package/article/59059.html +435 -0
  240. package/article/59095.html +350 -0
  241. package/article/59349.html +244 -0
  242. package/article/59402.html +216 -0
  243. package/article/59448.html +55 -0
  244. package/article/59870.html +94 -0
  245. package/article/59877.html +208 -0
  246. package/article/5dbb6f41.html +86 -0
  247. package/article/6008.html +75 -0
  248. package/article/60327.html +126 -0
  249. package/article/6035.html +76 -0
  250. package/article/60428.html +71 -0
  251. package/article/60544.html +128 -0
  252. package/article/61319.html +95 -0
  253. package/article/61367.html +93 -0
  254. package/article/624d1918.html +292 -0
  255. package/article/62543.html +71 -0
  256. package/article/62887.html +169 -0
  257. package/article/63074.html +120 -0
  258. package/article/63266.html +311 -0
  259. package/article/63351.html +74 -0
  260. package/article/63542.html +104 -0
  261. package/article/63824.html +275 -0
  262. package/article/64051.html +653 -0
  263. package/article/64189b69.html +72 -0
  264. package/article/64354.html +75 -0
  265. package/article/64869.html +79 -0
  266. package/article/64923.html +596 -0
  267. package/article/65128.html +95 -0
  268. package/article/65295.html +79 -0
  269. package/article/6888.html +75 -0
  270. package/article/7065.html +84 -0
  271. package/article/7455.html +85 -0
  272. package/article/7a3ef8f.html +315 -0
  273. package/article/8140.html +188 -0
  274. package/article/8190.html +85 -0
  275. package/article/8225.html +78 -0
  276. package/article/84c9ccd6.html +159 -0
  277. package/article/8f9a9ae3.html +82 -0
  278. package/article/9174.html +73 -0
  279. package/article/9738.html +294 -0
  280. package/article/a4145266.html +71 -0
  281. package/article/bedea419.html +72 -0
  282. package/article/bf7e7421.html +78 -0
  283. package/article/c1867fbf.html +103 -0
  284. package/article/c5576490.html +70 -0
  285. package/article/dcb0db28.html +76 -0
  286. package/article/fc3b727a.html +79 -0
  287. package/atom.xml +445 -0
  288. package/baidusitemap.xml +1079 -0
  289. package/blocks/dns.txt +264 -0
  290. package/blocks/filter.txt +1070 -0
  291. package/blocks/script.js +42 -0
  292. package/categories/CDN/index.html +48 -0
  293. package/categories/IDE/index.html +48 -0
  294. package/categories/git/index.html +48 -0
  295. package/categories/hexo/index.html +48 -0
  296. package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
  297. package/categories//345/210/206/344/272/253/index.html +48 -0
  298. package/categories//345/211/215/347/253/257/index.html +48 -0
  299. package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
  300. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
  301. 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
  302. package/categories//345/215/232/345/256/242/index.html +48 -0
  303. package/categories//345/267/245/345/205/267/index.html +48 -0
  304. package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
  305. 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
  306. package/categories//346/255/243/345/210/231/index.html +48 -0
  307. package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
  308. package/categories//347/256/227/346/263/225/index.html +48 -0
  309. package/categories//350/265/204/350/256/257/index.html +48 -0
  310. package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
  311. package/cdn/css/font-awesome.min.css +4 -0
  312. package/cdn/css/grids-responsive-min.css +7 -0
  313. package/cdn/css/normalize.css +349 -0
  314. package/cdn/css/pure-min.css +11 -0
  315. package/cdn/fonts/fontawesome-webfont.eot +0 -0
  316. package/cdn/fonts/fontawesome-webfont.svg +2671 -0
  317. package/cdn/fonts/fontawesome-webfont.ttf +0 -0
  318. package/cdn/fonts/fontawesome-webfont.woff +0 -0
  319. package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
  320. package/cdn/js/Valine.min.js +17 -0
  321. package/cdn/js/canvas-nest.js +1 -0
  322. package/cdn/js/clipboard.min.js +7 -0
  323. package/cdn/js/crypto-js.js +25 -0
  324. package/cdn/js/jquery.min.js +2 -0
  325. package/css/default.css +1144 -0
  326. package/css/donate.css +338 -0
  327. package/css/hbe.style.css +749 -0
  328. package/css/style.css +2095 -0
  329. package/donate/index.html +39 -0
  330. package/google917dcf72f6e5c7f5.html +1 -0
  331. package/guestbook/index.html +68 -0
  332. package/hosts/ads.txt +149 -0
  333. package/hosts/flash.txt +9 -0
  334. package/hosts/github.txt +6 -0
  335. package/hosts/google.txt +16936 -0
  336. package/hosts/winrar.txt +2 -0
  337. package/img/alipay.svg +46 -0
  338. package/img/bitcoin.svg +135 -0
  339. package/img/blog.ico +0 -0
  340. package/img/blog.png +0 -0
  341. package/img/gaba.png +0 -0
  342. package/img/github.svg +1 -0
  343. package/img/like.svg +1 -0
  344. package/img/mp-mini.jpg +0 -0
  345. package/img/mp.png +0 -0
  346. package/img/paypal.svg +63 -0
  347. package/img/upy_logo.svg +59 -0
  348. package/img/wechat.svg +49 -0
  349. package/index.html +48 -0
  350. package/jd_root.txt +1 -0
  351. package/js/codeblock-resizer.js +51 -0
  352. package/js/dark.js +12 -0
  353. package/js/donate.js +87 -0
  354. package/js/fixedPage.js +106 -0
  355. package/js/gitment.browser.js +3751 -0
  356. package/js/search.js +86 -0
  357. package/js/share.js +60 -0
  358. package/js/smartresize.js +32 -0
  359. package/js/totop.js +12 -0
  360. package/kankan/index.html +77 -0
  361. package/lib/hbe.js +293 -0
  362. package/package.json +25 -0
  363. package/page/10/index.html +49 -0
  364. package/page/11/index.html +59 -0
  365. package/page/12/index.html +67 -0
  366. package/page/13/index.html +63 -0
  367. package/page/14/index.html +66 -0
  368. package/page/15/index.html +60 -0
  369. package/page/16/index.html +60 -0
  370. package/page/17/index.html +62 -0
  371. package/page/18/index.html +61 -0
  372. package/page/19/index.html +58 -0
  373. package/page/2/index.html +48 -0
  374. package/page/20/index.html +57 -0
  375. package/page/21/index.html +61 -0
  376. package/page/22/index.html +55 -0
  377. package/page/23/index.html +64 -0
  378. package/page/24/index.html +60 -0
  379. package/page/25/index.html +58 -0
  380. package/page/26/index.html +48 -0
  381. package/page/27/index.html +58 -0
  382. package/page/3/index.html +48 -0
  383. package/page/4/index.html +48 -0
  384. package/page/5/index.html +51 -0
  385. package/page/6/index.html +51 -0
  386. package/page/7/index.html +51 -0
  387. package/page/8/index.html +53 -0
  388. package/page/9/index.html +48 -0
  389. package/randomcall/README.html +1 -0
  390. package/randomcall/lucker.html +290 -0
  391. package/randomcall/lucky.png +0 -0
  392. package/robots.txt +22 -0
  393. package/search.xml +6740 -0
  394. package/sitemap.xml +2669 -0
  395. package/tags//345/216/237/345/210/233/index.html +48 -0
  396. package/tags//345/250/261/344/271/220/index.html +48 -0
  397. package/tags//346/211/213/345/206/231/index.html +48 -0
  398. package/tags//347/226/253/346/203/205/index.html +48 -0
  399. package/tags//350/275/254/350/275/275/index.html +48 -0
  400. package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
  401. package/v.html +90 -0
@@ -0,0 +1,404 @@
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>高频面试题深入解析 / 周刊 01 | 前端壹菜鸟</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">高频面试题深入解析 / 周刊 01</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"> 4k</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"> 16</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/20093.html#vcomment"><span class="waline-comment-count" data-path="/article/20093.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://github.com/YvetteLau/Blog/issues/31</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><p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step">Step-By-Step</a> (点击进入项目) 是我于 <code>2019-05-20</code> 开始的一个项目,项目愿景:一步一个脚印,量变引起质变。</p>
22
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step">Step-By-Step</a> 仅会在工作日发布面试题,主要考虑到部分小伙伴平时工作较为繁忙,或周末有出游计划。每个周末我会仔细阅读大家的答案,整理最一份较优答案出来,因本人水平有限,有误的地方,大家及时指正。参与答题的小伙伴,可以对比自己的回答。</p>
23
+ <p><strong>答题不是目的</strong>,不希望大家仅仅是简单的搜索答案,复制粘贴到issue下。更多的是希望大家及时查漏补缺 &#x2F; 巩固相关知识。</p>
24
+ <hr>
25
+ <h3 id="1-如何正确判断this的指向?-2019-05-20"><a href="#1-如何正确判断this的指向?-2019-05-20" class="headerlink" title="1.如何正确判断this的指向?(2019-05-20)"></a>1.如何正确判断this的指向?(2019-05-20)</h3><p>如果用一句话说明 this 的指向,那么即是: 谁调用它,this 就指向谁。</p>
26
+ <p>但是仅通过这句话,我们很多时候并不能准确判断 this 的指向。因此我们需要借助一些规则去帮助自己:</p>
27
+ <p>this 的指向可以按照以下顺序判断:</p>
28
+ <h4 id="1-全局环境中的-this"><a href="#1-全局环境中的-this" class="headerlink" title="1. 全局环境中的 this"></a>1. 全局环境中的 this</h4><p>浏览器环境:无论是否在严格模式下,在全局执行环境中(在任何函数体外部)this 都指向全局对象 <code>window</code>;</p>
29
+ <p>node 环境:无论是否在严格模式下,在全局执行环境中(在任何函数体外部),this 都是空对象 <code>&#123;&#125;</code>;</p>
30
+ <h4 id="2-是否是-new-绑定"><a href="#2-是否是-new-绑定" class="headerlink" title="2. 是否是 new 绑定"></a>2. 是否是 <code>new</code> 绑定</h4><p>如果是 <code>new</code> 绑定,并且构造函数中没有返回 function 或者是 object,那么 this 指向这个新对象。如下:</p>
31
+ <blockquote>
32
+ <p>构造函数返回值不是 function 或 object。</p>
33
+ </blockquote>
34
+ <pre><code>functionSuper(age) &#123;
35
+ this.age= age;
36
+ &#125;
37
+
38
+ let instance =newSuper(&#39;26&#39;);
39
+ console.log(instance.age); //26
40
+ </code></pre>
41
+ <blockquote>
42
+ <p>构造函数返回值是 function 或 object,这种情况下 this 指向的是返回的对象。</p>
43
+ </blockquote>
44
+ <pre><code>functionSuper(age) &#123;
45
+ this.age= age;
46
+ let obj = &#123;a:&#39;2&#39;&#125;;
47
+ return obj;
48
+ &#125;
49
+
50
+
51
+ let instance =newSuper(&#39;hello&#39;);
52
+ console.log(instance.age); //undefined
53
+ </code></pre>
54
+ <p>你可以想知道为什么会这样?我们来看一下 <code>new</code> 的实现原理:</p>
55
+ <ol>
56
+ <li><p>创建一个新对象。</p>
57
+ </li>
58
+ <li><p>这个新对象会被执行 <code>[[原型]]</code> 连接。</p>
59
+ </li>
60
+ <li><p>属性和方法被加入到 this 引用的对象中。并执行了构造函数中的方法.</p>
61
+ </li>
62
+ <li><p>如果函数没有返回其他对象,那么 this 指向这个新对象,否则 this 指向构造函数中返回的对象。</p>
63
+ <p> functionnew(func) {<br> let target &#x3D; {};<br> target.<strong>proto</strong>&#x3D;func.prototype;<br> let res &#x3D;func.call(target);<br> &#x2F;&#x2F;排除 null 的情况if (res &amp;&amp;typeof(res) &#x3D;&#x3D;”object”||typeof(res) &#x3D;&#x3D;”function”) {<br> return res;<br> }<br> return target;<br> }</p>
64
+ </li>
65
+ </ol>
66
+ <h4 id="3-函数是否通过-call-apply-调用,或者使用了-bind-绑定,如果是,那么this绑定的就是指定的对象【归结为显式绑定】。"><a href="#3-函数是否通过-call-apply-调用,或者使用了-bind-绑定,如果是,那么this绑定的就是指定的对象【归结为显式绑定】。" class="headerlink" title="3. 函数是否通过 call,apply 调用,或者使用了 bind 绑定,如果是,那么this绑定的就是指定的对象【归结为显式绑定】。"></a>3. 函数是否通过 call,apply 调用,或者使用了 bind 绑定,如果是,那么this绑定的就是指定的对象【归结为显式绑定】。</h4><pre><code>functioninfo()&#123;
67
+ console.log(this.age);
68
+ &#125;
69
+ var person = &#123;
70
+ age:20,
71
+ info
72
+ &#125;
73
+ var age =28;
74
+ var info =person.info;
75
+ info.call(person); //20info.apply(person); //20info.bind(person)(); //20
76
+ </code></pre>
77
+ <p>这里同样需要注意一种<strong>特殊</strong>情况,如果 call,apply 或者 bind 传入的第一个参数值是 <code>undefined</code> 或者 <code>null</code>,严格模式下 this 的值为传入的值 null &#x2F;undefined。非严格模式下,实际应用的默认绑定规则,this 指向全局对象(node环境为global,浏览器环境为window)</p>
78
+ <pre><code>functioninfo()&#123;
79
+ //node环境中:非严格模式 global,严格模式为null//浏览器环境中:非严格模式 window,严格模式为nullconsole.log(this);
80
+ console.log(this.age);
81
+ &#125;
82
+ var person = &#123;
83
+ age:20,
84
+ info
85
+ &#125;
86
+ var age =28;
87
+ var info =person.info;
88
+ //严格模式抛出错误;//非严格模式,node下输出undefined(因为全局的age不会挂在 global 上)//非严格模式。浏览器环境下输出 28(因为全局的age会挂在 window 上)info.call(null);
89
+ </code></pre>
90
+ <h4 id="4-隐式绑定,函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的隐式调用为-xxx-fn"><a href="#4-隐式绑定,函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的隐式调用为-xxx-fn" class="headerlink" title="4. 隐式绑定,函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的隐式调用为: xxx.fn()"></a>4. 隐式绑定,函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的隐式调用为: <code>xxx.fn()</code></h4><pre><code>functioninfo()&#123;
91
+ console.log(this.age);
92
+ &#125;
93
+ var person = &#123;
94
+ age:20,
95
+ info
96
+ &#125;
97
+ var age =28;
98
+ person.info(); //20;执行的是隐式绑定
99
+ </code></pre>
100
+ <h4 id="5-默认绑定,在不能应用其它绑定规则时使用的默认规则,通常是独立函数调用。"><a href="#5-默认绑定,在不能应用其它绑定规则时使用的默认规则,通常是独立函数调用。" class="headerlink" title="5. 默认绑定,在不能应用其它绑定规则时使用的默认规则,通常是独立函数调用。"></a>5. 默认绑定,在不能应用其它绑定规则时使用的默认规则,通常是独立函数调用。</h4><p>非严格模式: node环境,执行全局对象 global,浏览器环境,执行全局对象 window。</p>
101
+ <p>严格模式:执行 undefined</p>
102
+ <pre><code>functioninfo()&#123;
103
+ console.log(this.age);
104
+ &#125;
105
+ var age =28;
106
+ //严格模式;抛错//非严格模式,node下输出 undefined(因为全局的age不会挂在 global 上)//非严格模式。浏览器环境下输出 28(因为全局的age会挂在 window 上)//严格模式抛出,因为 this 此时是 undefinedinfo();
107
+ </code></pre>
108
+ <h4 id="6-箭头函数的情况:"><a href="#6-箭头函数的情况:" class="headerlink" title="6. 箭头函数的情况:"></a>6. 箭头函数的情况:</h4><p>箭头函数没有自己的this,继承外层上下文绑定的this。</p>
109
+ <pre><code>let obj = &#123;
110
+ age:20,
111
+ info:function() &#123;
112
+ return () =&gt; &#123;
113
+ console.log(this.age); //this继承的是外层上下文绑定的this
114
+ &#125;
115
+ &#125;
116
+ &#125;
117
+
118
+ let person = &#123;age:28&#125;;
119
+ let info =obj.info();
120
+ info(); //20let info2 =obj.info.call(person);
121
+ info2(); //28
122
+ </code></pre>
123
+ <blockquote>
124
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step/issues/1">点击查看更多</a></p>
125
+ </blockquote>
126
+ <h3 id="2-JS中原始类型有哪几种?null-是对象吗?原始数据类型和复杂数据类型有什么区别?-2019-05-21"><a href="#2-JS中原始类型有哪几种?null-是对象吗?原始数据类型和复杂数据类型有什么区别?-2019-05-21" class="headerlink" title="2.JS中原始类型有哪几种?null 是对象吗?原始数据类型和复杂数据类型有什么区别?(2019-05-21)"></a>2.JS中原始类型有哪几种?null 是对象吗?原始数据类型和复杂数据类型有什么区别?(2019-05-21)</h3><h4 id="目前,JS原始类型有六种,分别为"><a href="#目前,JS原始类型有六种,分别为" class="headerlink" title="目前,JS原始类型有六种,分别为:"></a>目前,JS原始类型有六种,分别为:</h4><ul>
127
+ <li>Boolean</li>
128
+ <li>String</li>
129
+ <li>Number</li>
130
+ <li>Undefined</li>
131
+ <li>Null</li>
132
+ <li>Symbol(ES6新增)</li>
133
+ </ul>
134
+ <p>ES10新增了一种基本数据类型:BigInt</p>
135
+ <p>复杂数据类型只有一种: Object</p>
136
+ <p>null 不是一个对象,尽管 <code>typeof null</code> 输出的是 <code>object</code>,这是一个历史遗留问题,JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,<code>null</code> 表示为全零,所以将它错误的判断为 <code>object</code> 。</p>
137
+ <h4 id="基本数据类型和复杂数据类型的区别为"><a href="#基本数据类型和复杂数据类型的区别为" class="headerlink" title="基本数据类型和复杂数据类型的区别为:"></a>基本数据类型和复杂数据类型的区别为:</h4><ol>
138
+ <li>内存的分配不同</li>
139
+ </ol>
140
+ <ul>
141
+ <li><p>基本数据类型存储在栈中。</p>
142
+ </li>
143
+ <li><p>复杂数据类型存储在堆中,栈中存储的变量,是指向堆中的引用地址。</p>
144
+ </li>
145
+ </ul>
146
+ <ol>
147
+ <li>访问机制不同</li>
148
+ </ol>
149
+ <ul>
150
+ <li>基本数据类型是按值访问</li>
151
+ <li>复杂数据类型按引用访问,JS不允许直接访问保存在堆内存中的对象,在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值。</li>
152
+ </ul>
153
+ <ol>
154
+ <li>复制变量时不同(a&#x3D;b)</li>
155
+ </ol>
156
+ <ul>
157
+ <li><p>基本数据类型:a&#x3D;b;是将b中保存的原始值的副本赋值给新变量a,a和b完全独立,互不影响</p>
158
+ </li>
159
+ <li><p>复杂数据类型:a&#x3D;b;将b保存的对象内存的引用地址赋值给了新变量a;a和b指向了同一个堆内存地址,其中一个值发生了改变,另一个也会改变。</p>
160
+ <p> let b &#x3D; {<br> age:10<br> }</p>
161
+ <p> let a &#x3D; b;<br> a.age&#x3D;20;<br> console.log(a); &#x2F;&#x2F;{ age: 20 }</p>
162
+ </li>
163
+ </ul>
164
+ <ol>
165
+ <li>参数传递的不同(实参&#x2F;形参)</li>
166
+ </ol>
167
+ <p>函数传参都是按值传递(栈中的存储的内容):基本数据类型,拷贝的是值;复杂数据类型,拷贝的是引用地址</p>
168
+ <pre><code>//基本数据类型let b =10functionchange(info) &#123;
169
+ info=20;
170
+ &#125;
171
+ //info=b;基本数据类型,拷贝的是值得副本,二者互不干扰change(b);
172
+ console.log(b);//10
173
+
174
+ //复杂数据类型let b = &#123;
175
+ age:10
176
+ &#125;
177
+
178
+ functionchange(info) &#123;
179
+ info.age=20;
180
+ &#125;
181
+ //info=b;根据第三条差异,可以看出,拷贝的是地址的引用,修改互相影响。change(b);
182
+ console.log(b);//&#123; age: 20 &#125;
183
+ </code></pre>
184
+ <blockquote>
185
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step/issues/5">点击查看更多</a></p>
186
+ </blockquote>
187
+ <h3 id="3-说一说你对HTML5语义化的理解-2019-05-22"><a href="#3-说一说你对HTML5语义化的理解-2019-05-22" class="headerlink" title="3.说一说你对HTML5语义化的理解(2019-05-22)"></a>3.说一说你对HTML5语义化的理解(2019-05-22)</h3><p>语义化意味着顾名思义,HTML5的语义化指的是合理正确的使用语义化的标签来创建页面结构,如 header,footer,nav,从标签上即可以直观的知道这个标签的作用,而不是滥用div。</p>
188
+ <h4 id="语义化的优点有"><a href="#语义化的优点有" class="headerlink" title="语义化的优点有:"></a>语义化的优点有:</h4><ul>
189
+ <li>代码结构清晰,易于阅读,利于开发和维护</li>
190
+ <li>方便其他设备解析(如屏幕阅读器)根据语义渲染网页。</li>
191
+ <li>有利于搜索引擎优化(SEO),搜索引擎爬虫会根据不同的标签来赋予不同的权重</li>
192
+ </ul>
193
+ <h4 id="语义化标签主要有:"><a href="#语义化标签主要有:" class="headerlink" title="语义化标签主要有:"></a>语义化标签主要有:</h4><ul>
194
+ <li>title:主要用于页面的头部的信息介绍</li>
195
+ <li>header:定义文档的页眉</li>
196
+ <li>nav:主要用于页面导航</li>
197
+ <li>main:规定文档的主要内容。对于文档来说应当是唯一的。它不应包含在文档中重复出现的内容,比如侧栏、导航栏、版权信息、站点标志或搜索表单。</li>
198
+ <li>article:独立的自包含内容</li>
199
+ <li>h1~h6:定义标题</li>
200
+ <li>ul: 用来定义无序列表</li>
201
+ <li>ol: 用来定义有序列表</li>
202
+ <li>address:定义文档或文章的作者&#x2F;拥有者的联系信息。</li>
203
+ <li>canvas:用于绘制图像</li>
204
+ <li>dialog:定义一个对话框、确认框或窗口</li>
205
+ <li>aside:定义其所处内容之外的内容。<code>&lt;aside&gt;</code> 的内容可用作文章的侧栏。</li>
206
+ <li>section:定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。</li>
207
+ <li>figure:规定独立的流内容(图像、图表、照片、代码等等)。figure 元素的内容应该与主内容相关,但如果被删除,则不应对文档流产生影响。</li>
208
+ <li>details:描述文档或者文档某一部分细节</li>
209
+ <li>mark:义带有记号的文本。</li>
210
+ </ul>
211
+ <h4 id="语义化应用"><a href="#语义化应用" class="headerlink" title="语义化应用"></a>语义化应用</h4><p>例如使用这些可视化标签,构建下面的页面结构:</p>
212
+ <p><a target="_blank" rel="noopener" href="https://camo.githubusercontent.com/f2fea7383cb61407e11a615750bfd29c2270b5cc/68747470733a2f2f6e6f74652e796f7564616f2e636f6d2f7977732f7075626c69632f7265736f757263652f66343537303163633431303530346537316462626362643838363165386430632f786d6c6e6f74652f5745425245534f5552434534666639316465326462616234643833666362353330386630383666656666342f3239353032"><img src="https://camo.githubusercontent.com/f2fea7383cb61407e11a615750bfd29c2270b5cc/68747470733a2f2f6e6f74652e796f7564616f2e636f6d2f7977732f7075626c69632f7265736f757263652f66343537303163633431303530346537316462626362643838363165386430632f786d6c6e6f74652f5745425245534f5552434534666639316465326462616234643833666362353330386630383666656666342f3239353032" alt="xuehuayu.cn"></a></p>
213
+ <p>对于早期不支持 HTML5 的浏览器,如IE8及更早之前的版本,我们可以引入 html5shiv 来支持。</p>
214
+ <blockquote>
215
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step/issues/8">点击查看更多</a></p>
216
+ </blockquote>
217
+ <h3 id="4-如何让-a-x3D-x3D-1-amp-amp-a-x3D-x3D-2-amp-amp-a-x3D-x3D-3-的值为true?"><a href="#4-如何让-a-x3D-x3D-1-amp-amp-a-x3D-x3D-2-amp-amp-a-x3D-x3D-3-的值为true?" class="headerlink" title="4.如何让 (a &#x3D;&#x3D; 1 &amp;&amp; a &#x3D;&#x3D; 2 &amp;&amp; a &#x3D;&#x3D; 3) 的值为true?"></a>4.如何让 (a &#x3D;&#x3D; 1 &amp;&amp; a &#x3D;&#x3D; 2 &amp;&amp; a &#x3D;&#x3D; 3) 的值为true?</h3><h4 id="4-1-利用隐式转换规则"><a href="#4-1-利用隐式转换规则" class="headerlink" title="4.1 利用隐式转换规则"></a>4.1 利用隐式转换规则</h4><p><code>==</code> 操作符在左右数据类型不一致时,会先进行隐式转换。</p>
218
+ <p><code>a == 1 &amp;&amp; a == 2 &amp;&amp; a == 3</code> 的值意味着其不可能是基本数据类型。因为如果 a 是 null 或者是 undefined bool类型,都不可能返回true。</p>
219
+ <p>因此可以推测 a 是复杂数据类型,JS 中复杂数据类型只有 <code>object</code>,回忆一下,Object 转换为原始类型会调用什么方法?</p>
220
+ <ul>
221
+ <li><p>如果部署了 <code>[Symbol.toPrimitive]</code> 接口,那么调用此接口,若返回的不是基本数据类型,抛出错误。</p>
222
+ </li>
223
+ <li><p>如果没有部署 <code>[Symbol.toPrimitive]</code> 接口,那么根据要转换的类型,先调用 <code>valueOf</code> &#x2F; <code>toString</code></p>
224
+ </li>
225
+ </ul>
226
+ <ol>
227
+ <li><p>非Date类型对象,<code>hint</code> 是 <code>default</code> 时,调用顺序为:<code>valueOf</code> &gt;&gt;&gt; <code>toString</code>,即<code>valueOf</code> 返回的不是基本数据类型,才会继续调用 <code>toString</code>,如果<code>toString</code> 返回的还不是基本数据类型,那么抛出错误。</p>
228
+ </li>
229
+ <li><p>如果 <code>hint</code> 是 <code>string</code>(Date对象的hint默认是string) ,调用顺序为:<code>toString</code> &gt;&gt;&gt; <code>valueOf</code>,即<code>toString</code> 返回的不是基本数据类型,才会继续调用 <code>valueOf</code>,如果<code>valueOf</code> 返回的还不是基本数据类型,那么抛出错误。</p>
230
+ </li>
231
+ <li><p>如果 <code>hint</code> 是 <code>number</code>,调用顺序为: <code>valueOf</code> &gt;&gt;&gt; <code>toString</code></p>
232
+ <p> var obj &#x3D; {<br> <a href="hint">Symbol.toPrimitive</a> {<br> console.log(hint);<br> return10;<br> },<br> valueOf() {<br> console.log(‘valueOf’);<br> return20;<br> },<br> toString() {<br> console.log(‘toString’);<br> return’hello’;<br> }<br> }<br> console.log(obj +’yvette’); &#x2F;&#x2F;default&#x2F;&#x2F;如果没有部署 [Symbol.toPrimitive]接口,调用顺序为<code>valueOf</code> &gt;&gt;&gt; <code>toString</code>console.log(obj &#x3D;&#x3D;’yvette’); &#x2F;&#x2F;default&#x2F;&#x2F;如果没有部署 [Symbol.toPrimitive]接口,调用顺序为<code>valueOf</code> &gt;&gt;&gt; <code>toString</code>console.log(obj *10);&#x2F;&#x2F;number&#x2F;&#x2F;如果没有部署 [Symbol.toPrimitive]接口,调用顺序为<code>valueOf</code> &gt;&gt;&gt; <code>toString</code>console.log(Number(obj));&#x2F;&#x2F;number&#x2F;&#x2F;如果没有部署 [Symbol.toPrimitive]接口,调用顺序为<code>valueOf</code> &gt;&gt;&gt; <code>toString</code>console.log(String(obj));&#x2F;&#x2F;string&#x2F;&#x2F;如果没有部署 [Symbol.toPrimitive]接口,调用顺序为<code>toString</code> &gt;&gt;&gt; <code>valueOf</code></p>
233
+ </li>
234
+ </ol>
235
+ <p>那么对于这道题,只要 <code>[Symbol.toPrimitive]</code> 接口,第一次返回的值是 1,然后递增,即成功成立。</p>
236
+ <pre><code>let a = &#123;
237
+ [Symbol.toPrimitive]: (function(hint) &#123;
238
+ let i =1;
239
+ //闭包的特性之一:i 不会被回收returnfunction() &#123;
240
+ return i++;
241
+ &#125;
242
+ &#125;)()
243
+ &#125;
244
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
245
+ </code></pre>
246
+ <p>调用 <code>valueOf</code> 接口的情况:</p>
247
+ <pre><code>let a = &#123;
248
+ valueOf: (function() &#123;
249
+ let i =1;
250
+ //闭包的特性之一:i 不会被回收returnfunction() &#123;
251
+ return i++;
252
+ &#125;
253
+ &#125;)()
254
+ &#125;
255
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
256
+ </code></pre>
257
+ <p>另外,除了i自增的方法外,还可以利用 正则,如下</p>
258
+ <pre><code>let a = &#123;
259
+ reg:/\d/g,
260
+ valueOf () &#123;
261
+ returnthis.reg.exec(123)[0]
262
+ &#125;
263
+ &#125;
264
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
265
+ </code></pre>
266
+ <p>调用 <code>toString</code> 接口的情况,不再做说明。</p>
267
+ <h4 id="4-2-利用数据劫持"><a href="#4-2-利用数据劫持" class="headerlink" title="4.2 利用数据劫持"></a>4.2 利用数据劫持</h4><p>使用 <code>Object.defineProperty</code> 定义的属性,在获取属性时,会调用 <code>get</code> 方法。利用这个特性,我们在 <code>window</code> 对象上定义 <code>a</code> 属性,如下:</p>
268
+ <pre><code>let i =1;
269
+ Object.defineProperty(window, &#39;a&#39;, &#123;
270
+ get:function() &#123;
271
+ return i++;
272
+ &#125;
273
+ &#125;);
274
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
275
+ </code></pre>
276
+ <p>ES6 新增了 <code>Proxy</code> ,此处我们同样可以利用 <code>Proxy</code> 去实现,如下:</p>
277
+ <pre><code>let a =newProxy(&#123;&#125;, &#123;
278
+ i:1,
279
+ get:function () &#123;
280
+ return () =&gt;this.i++;
281
+ &#125;
282
+ &#125;);
283
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); // true
284
+ </code></pre>
285
+ <h4 id="4-3-数组的-toString-接口默认调用数组的-join-方法,重写数组的-join-方法。"><a href="#4-3-数组的-toString-接口默认调用数组的-join-方法,重写数组的-join-方法。" class="headerlink" title="4.3 数组的 toString 接口默认调用数组的 join 方法,重写数组的 join 方法。"></a>4.3 数组的 <code>toString</code> 接口默认调用数组的 <code>join</code> 方法,重写数组的 <code>join</code> 方法。</h4><pre><code>let a = [1, 2, 3];
286
+ a.join=a.shift;
287
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
288
+ </code></pre>
289
+ <h4 id="4-4-利用-with-关键字"><a href="#4-4-利用-with-关键字" class="headerlink" title="4.4 利用 with 关键字"></a>4.4 利用 <code>with</code> 关键字</h4><p>我本人对 <code>with</code> 向来是敬而远之的。不过 <code>with</code> 的确也是此题方法之一:</p>
290
+ <pre><code>let i =0;
291
+
292
+ with (&#123;
293
+ geta() &#123;
294
+ return++i;
295
+ &#125;
296
+ &#125;) &#123;
297
+ console.log(a ==1&amp;&amp; a ==2&amp;&amp; a ==3); //true
298
+ &#125;
299
+ </code></pre>
300
+ <blockquote>
301
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step/issues/9">点击查看更多</a></p>
302
+ </blockquote>
303
+ <h3 id="5-防抖-debounce-函数的作用是什么?有哪些应用场景,请实现一个防抖函数。"><a href="#5-防抖-debounce-函数的作用是什么?有哪些应用场景,请实现一个防抖函数。" class="headerlink" title="5.防抖(debounce)函数的作用是什么?有哪些应用场景,请实现一个防抖函数。"></a>5.防抖(debounce)函数的作用是什么?有哪些应用场景,请实现一个防抖函数。</h3><h4 id="防抖函数的作用"><a href="#防抖函数的作用" class="headerlink" title="防抖函数的作用"></a>防抖函数的作用</h4><p>防抖函数的作用就是控制函数在一定时间内的执行次数。防抖意味着N秒内函数只会被执行一次,如果N秒内再次被触发,则重新计算延迟时间。</p>
304
+ <p>举例说明:小思最近在减肥,但是她非常贪吃。为此,与其男朋友约定好,如果10天不吃零食,就可以购买一个包(不要问为什么是包,因为包治百病)。但是如果中间吃了一次零食,那么就要重新计算时间,直到小思坚持10天没有吃零食,才能购买一个包。所以,管不住嘴的小思,没有机会买包(悲伤的故事)…这就是<strong>防抖</strong>。</p>
305
+ <p>不管吃没吃零食,每10天买一个包,中间想买包,忍着,等到第十天的时候再买,这种情况是<strong>节流</strong>。如何控制女朋友的消费,各位攻城狮们,get到了吗?防抖可比节流有效多了!</p>
306
+ <h4 id="防抖应用场景"><a href="#防抖应用场景" class="headerlink" title="防抖应用场景"></a>防抖应用场景</h4><ol>
307
+ <li>搜索框输入查询,如果用户一直在输入中,没有必要不停地调用去请求服务端接口,等用户停止输入的时候,再调用,设置一个合适的时间间隔,有效减轻服务端压力。</li>
308
+ <li>表单验证</li>
309
+ <li>按钮提交事件。</li>
310
+ <li>浏览器窗口缩放,resize事件等。</li>
311
+ </ol>
312
+ <h4 id="防抖函数实现"><a href="#防抖函数实现" class="headerlink" title="防抖函数实现"></a>防抖函数实现</h4><p><code>immediate</code> 为 true 时,表示开始会立即触发一次。</p>
313
+ <p><code>immediate</code> 为 false 时,表示最后一次一定会触发。</p>
314
+ <p><code>loadsh</code> 中的 <code>debounce</code> 的第三个参数 <code>option</code> ,提供了 <code>leading</code> 和 <code>trailing</code> 两个参数。</p>
315
+ <pre><code>functiondebounce(func, wait, immediate=true) &#123;
316
+ let timeout, context, args;
317
+ // 延迟执行函数constlater= () =&gt;setTimeout(() =&gt; &#123;
318
+ // 延迟函数执行完毕,清空定时器
319
+ timeout =null// 延迟执行的情况下,函数会在延迟函数中执行// 使用到之前缓存的参数和上下文if (!immediate) &#123;
320
+ func.apply(context, args);
321
+ context = args =null;
322
+ &#125;
323
+ &#125;, wait);
324
+ letdebounced=function (...params) &#123;
325
+ if (!timeout) &#123;
326
+ timeout =later();
327
+ if (immediate) &#123;
328
+ //立即执行func.apply(this, params);
329
+ &#125; else &#123;
330
+ //闭包
331
+ context =this;
332
+ args = params;
333
+ &#125;
334
+ &#125; else &#123;
335
+ clearTimeout(timeout);
336
+ timeout =later();
337
+ &#125;
338
+ &#125;
339
+ debounced.cancel=function () &#123;
340
+ clearTimeout(timeout);
341
+ timeout =null;
342
+ &#125;;
343
+ return debounced;
344
+ &#125;;
345
+ </code></pre>
346
+ <blockquote>
347
+ <p><a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Step-By-Step/issues/10">点击查看更多</a></p>
348
+ </blockquote>
349
+ <p>参考文章:</p>
350
+ <p>[1] <a target="_blank" rel="noopener" href="https://www.ecma-international.org/ecma-262/6.0/#sec-completion-record-specification-type">https://www.ecma-international.org/ecma-262/6.0/#sec-completion-record-specification-type</a></p>
351
+ <p>[2] <a target="_blank" rel="noopener" href="https://juejin.im/post/5c96d0c751882511c832ff7b">嗨,你真的懂this吗?</a></p>
352
+ <p>[3] <a target="_blank" rel="noopener" href="https://juejin.im/post/5cab0c45f265da2513734390">【面试篇】寒冬求职季之你必须要懂的原生JS(上)</a></p>
353
+ <p>[4] <a target="_blank" rel="noopener" href="https://juejin.im/post/5cbd1e33e51d45789161d053">【面试篇】寒冬求职季之你必须要懂的原生JS(中)</a></p>
354
+ <p>谢谢各位小伙伴愿意花费宝贵的时间阅读本文,如果本文给了您一点帮助或者是启发,请不要吝啬你的赞和Star,您的肯定是我前进的最大动力。<a target="_blank" rel="noopener" href="https://github.com/YvetteLau/Blog">https://github.com/YvetteLau/Blog</a></p>
355
+ </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;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/20093.html">https://xuehuayu.cn/article/20093.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/5204.html">这儿有20道大厂面试题等你查收</a><a class="next" href="/article/54632.html">前端跳槽必备,揭秘一线互联网公司高级前端JavaScript面试</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
356
+ const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
357
+ const locale = {
358
+ placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
359
+ sofa: '沙发空缺中,还不快抢~',
360
+ };
361
+ Waline.init({
362
+ el: '#vcomment',
363
+ serverURL: serverURL,
364
+ pageSize: '20',
365
+ visitor: true, // 阅读量统计
366
+ requiredMeta: ['nick', 'mail'],
367
+ emoji: [
368
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
369
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
370
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
371
+ ],
372
+ locale,
373
+ pageview: true
374
+ })
375
+ </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() {
376
+ var val = $(this).val()
377
+ 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>'
378
+ 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>'
379
+ 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>'
380
+
381
+ if (val === 'self') {
382
+ $('#search').html(self)
383
+ var search_path = 'search.xml';
384
+ if (search_path.length == 0) {
385
+ search_path = 'search.xml';
386
+ }
387
+ var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
388
+ searchFunc(path, 'local-search-input', 'local-search-result');
389
+ } else if (val === 'baidu') {
390
+ $('#search').html(baidu)
391
+ } else if (val === 'google') {
392
+ $('#search').html(google)
393
+ }
394
+ })</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(){
395
+ var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
396
+ if (cnb) {
397
+ var gxba =document.getElementById('gxba')
398
+ var gaba =document.getElementById('gaba')
399
+ var gabaLink =document.getElementById('gaba-link')
400
+ gxba.innerText ='京ICP备20007647号-1'
401
+ gaba.innerText ='京公网安备 11010802031254号'
402
+ gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
403
+ }
404
+ })()</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&amp;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>