1、代码优化
const demo = document.createElement('div')
demo.setAttribute('id', 'demo')
document.body.append(demo)
const el = document.querySelector('#demo');
for (let i = 0; i < 1000; i++) {
el .innerHTML += `<option value="${i}">第${i}个选项</option>`;
const el = document.querySelector('#demo');
let htmls = ''
for (let i = 0; i < 1000; i++) {
htmls += `<option value="${i}">第${i}个选项</option>`;
el.innerHTML = htmls
2、再次优化,防抖?懒加载??
const demo = document.createElement('div')
demo.setAttribute('id', 'demo')
document.body.append(demo)
let htmls = ''
let oldEl = ''
const el = document.querySelector('#demo');
function fd(callback, delay) {
let time = null
return () => {
clearTimeout(time)
time = setTimeout(callback, delay)
function lazy(callback, oldEl, noDataLength = 150) {
if (oldEl.length >= noDataLength) {
if (!document.getElementById('no-data')) {
const div = document.createElement('div')
div.setAttribute('id', 'no-data')
div.innerText = '没有更多数据了...'
el.appendChild(div)
return false
const st = document.documentElement.scrollTop
const cH = document.documentElement.clientHeight
const sH = document.body.scrollHeight
if (st + cH > sH) callback()
window.addEventListener('load', () => {
for (let i = 0; i < 50; i++) {
htmls += `<option value="${i}">第${i}个选项</option>`;
el.innerHTML = htmls
window.addEventListener('scroll', fd(() => {
lazy(() => {
oldEl = document.querySelectorAll('#demo option');
for (let i = 0; i < 50; i++) {
let option = document.createElement('option')
option.setAttribute('value', oldEl.length + i)
option.innerText = `第${oldEl.length + i}个选项`
el.appendChild(option)
}, oldEl, 100)
}, 500))
说明:可直接cv代码到控制台 F12 运行一、Promise.all 多接口请求,所有请求完成后打印所有请求结果// 定义接口路径const url = [100, 200, 300, 400, 500, 600, 700, 800, 900, 2000]// 模拟请求function request(u) { return new Promise(resolve => { setTimeout(() => { if (u === 500 || u === 700) {
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
今天拿到一个事,老板说有3000多条数据需要在里面填充经纬度,每一条都有一个地址,根据这个地址请求天地图官方解析出来的经纬度,将值填充进去。第一反应是网上搜索,捡现成的,看了下没搜出来就自己写逻辑了。其实很简单。
api 接口
// 这是简单的封装,针对post封装
const request = ({url, method = 'post', params = {}}) => {
params = Object.assign(params, {key: keystr()})
return n