首页 > 其他分享 >【React工作记录一百】前端小知识点扫盲笔记记录5

【React工作记录一百】前端小知识点扫盲笔记记录5

时间:2023-06-12 10:04:42浏览次数:37  
标签:function 知识点 arr img 记录 li React var girl

前言

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣带你进入前端巅峰交流群 今天继续对前端知识的小结

事件委托

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>事件委托</title>
	</head>

	<body>
		<ul>
			<li>11111</li>
			<li>22222</li>
			<li>33333</li>
			<li>44444</li>
			<li>55555</li>
		</ul>
		<script>
			// 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
			// ul有一万个li 进行事件绑定
			// var itemli = document.getElementsByTagName('li')
			// for (var i = 0; i < itemli.length; i++) {
			// 	itemli[i].onclick = (function (n) {
			// 		return function () {
			// 			console.log(n + itemli[n].innerHTML)
			// 		}
			// 	})(i)
			// }
			var ul = document.querySelector('ul')
			ul.onclick = function (e) {
				e = e || window.event //这一行及下一行是为兼容IE8及以下版本
				var target = e.target || e.srcElement
				if (target.tagName.toLowerCase() === 'li') {
					var li = this.querySelectorAll('li')
					index = Array.prototype.indexOf.call(li, target)
					alert(target.innerHTML + index)
				}
			}
			var ul = document.querySelector('ul');
			ul.addEventListener('click', function(e) {
			    // alert('点我应有弹框!');
			    // e.target 这个可以得到我们点击的对象
			    e.target.style.backgroundColor = 'pink';
			})
			// 点击下面的li变红
		</script>
	</body>
</html>

事件循环

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>事件循环</title>
</head>

<body>
  <!-- js的事件循环,每次读取一个任务,然后执行这个任务,执行完再继续获取下一个,
  如果暂时没有任务,就暂停执行,等待下一个任务到来;如果在执行任务的过程中有新的任务到达
  ,也不会中断现有任务的执行,而是添加到队列的尾部等待 -->
</body>

</html>

从浏览器地址栏输入url

// 1 输入 URL 后解析出协议、主机、端口、路径等信息,并构造一个 HTTP 请求。

// 2强缓存。
		// 协商缓存。
		// 3DNS 域名解析。(字节面试被虐后,是时候搞懂 DNS 了)
		// TCP 连接。
		// 4总是要问:为什么需要三次握手,两次不行吗?其实这是由 TCP 的自身特点可靠传输决定的。
        // 客户端和服务端要进行可靠传输,那么就需要确认双方的接收和发送能力。第一次握手可以确认客服端的发送能力,
        // 第二次握手,确认了服务端的发送能力和接收能力,所以第三次握手才可以确认客户端的接收能力。不然容易出现丢包的现象。
		// 5http 请求。
		// 6服务器处理请求并返回 HTTP 报文。
		// 7浏览器渲染页面。

代理模式

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代理模式</title>
</head>

<body>
  <script>
    // 先申明一个奶茶妹对象
    var TeaAndMilkGirl = function (name) {
      this.name = name;
    };
    // 这是京东ceo先生
    var Ceo = function (girl) {
      this.girl = girl;
      // 送结婚礼物 给奶茶妹
      this.sendMarriageRing = function (ring) {
        console.log("Hi " + this.girl.name + ", ceo送你一个礼物:" + ring);
      }
    };
    // 京东ceo的经纪人是代理,来代替送
    var ProxyObj = function (girl) {
      this.girl = girl;
      // 经纪人代理送礼物给奶茶妹
      this.sendGift = function (gift) {
        // 代理模式负责本体对象实例化
        (new Ceo(this.girl)).sendMarriageRing(gift);
      }
    };
    // 初始化
    var proxy = new ProxyObj(new TeaAndMilkGirl("奶茶妹"));
    proxy.sendGift("结婚戒"); // Hi 奶茶妹, ceo送你一个礼物:结婚戒
  </script>
</body>

</html>

使用代理模式预加载图片

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>使用代理模式加载图片</title>
</head>

<body>
  <script>
    var myImage = (function () {
      var imgNode = document.createElement("img");
      document.body.appendChild(imgNode);
      return {
        setSrc: function (src) {
          imgNode.src = src;
        }
      }
    })();
    // 代理模式
    var ProxyImage = (function () {
      var img = new Image();
      img.onload = function () {
        myImage.setSrc(this.src);
      };
      return {
        setSrc: function (src) {
          myImage.setSrc("http://img.lanrentuku.com/img/allimg/1212/5-121204193Q9-50.gif");
          img.src = src;
        }
      }
    })();
    // 调用方式
    ProxyImage.setSrc("https://img.alicdn.com/tps/i4/TB1b_neLXXXXXcoXFXXc8PZ9XXX-130-200.png");
  </script>
</body>

</html>

冒泡排序算法

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body>
		<script>
			function bubbleSort(arr) {
				for (var i = 0; i < arr.length; i++) {
					for (var j = arr.length - 1; j > i; j--) {
						if (arr[j] < arr[j - 1]) {
							var temp = arr[j]
							arr[j] = arr[j - 1]
							arr[j - 1] = temp

						}
					}
				}

				return arr
			}
			var arr = [32, 55, 66, 77, 18, 20]
			console.log(bubbleSort(arr))
            //[18, 20, 32, 55, 66, 77]
		</script>
	</body>
</html>

删除数组中的undefine和null

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>删除数组中的null和undefined</title>
</head>
<body>
  <script>
    function clearNullArr(arr){
      for(var i=0; i<arr.length; i++){
        if(!arr[i]||arr[i]==''||arr[i]===undefined){
          arr.splice(i, 1);
          arr.length--;
          i--
        }
      }
      return arr
    }
    var geyao=["","2","3","5",undefined,null,undefined]
    console.log(clearNullArr(geyao))//["2","3","5"]
  </script>
</body>
</html>

删除数组的制定下标元素

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>删除数组的指定下标元素</title>
</head>
<body>
  <script>
  Array.prototype.del=function(index){
    if(isNaN(index)||index>=this.length){
      return false;
    }
    for(var i=0,n=0;i<this.length;i++){
      if(this[i]!=this[index]){
        this[n++]=this[i];
      }
    }
    this.length-=1;
    return this
  };

  var geyao=["1","2","3"]
  console.log(geyao.del(1))//["1","3"]
  </script>
</body>
</html>

前端this指向问题解决方案apply

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>前端this指向问题普通函数apply</title>
</head>
<body>
  <script>
    //口诀 谁调用就会指向谁 这边是普通函数 直接报错this.fang is not a function
    var name="geyao"
      var fangfang = {
        name : "fangfang",

        fang: function () {
            console.log(this.name)
        },

        fun: function () {
            setTimeout( function () {
                this.fang()
            }.apply(this,fangfang),100);
        }

    };
    fangfang.fun()//fang


  </script>
  
</body>
</html>

总结

我是歌谣 最好的种树是十年前 其次是现在 加油 歌谣

标签:function,知识点,arr,img,记录,li,React,var,girl
From: https://blog.51cto.com/u_14476028/6459698

相关文章

  • 【React工作记录一百零一】再次接触老朋友react+ant design table合并单元格
    前言大家好我是歌谣今天继续开发一个需求就是我们的大屏需求今天让我们一步步解决所遇到的问题第一个功能如何渲染参照官网案例constdataSource=[{key:'1',name:'胡彦斌',age:32,address:'西湖区湖底公园1号',},{key:'2',nam......
  • react echats封装
    import*asechartsfrom"echarts";import{EChartsOption}from'echarts'functionIndex(props:EChartsOption){constechartsRef:any=useRef<HTMLElement>();useEffect(()=>{constmyChart=echarts.init(echartsRef.cur......
  • ChatGPT学习心得一(使用node+react做了一个案例)
    ChatGPT学习心得一(使用node+react做了一个案例) 项目地址http://chat.xutongbao.top项目截图编辑编辑编辑 编辑编辑使用技术栈node+SQLite+redis+nginx+log4js+express+jenkins+cdn+react+antd+react-scrollbars-custom+iconfont+webpack+postman+axios+redux+immut......
  • Linux知识点 – 随缘更新
    Linux基础篇1.桥接模式:虚拟系统可以和外部系统相互通讯,但是容易造成ip冲突,只能使用与物理机同一个网段2.nat模式:NAT模式与外界通话需要经过物理机(的NAT转换),不会多占一个局域网IP,可以与外部系统相互通讯,不会造成ip冲突,但是外部设备也无法访问虚拟设备3.主机模式:不和外部通讯4......
  • 【React工作记录九十九】ant design mobile实现tab滚动效果和闪屏小记
    前言大家好我是歌谣今天继续给大家带来前端工作中遇到的实际性问题如何实现一个tab效果以及闪屏问题效果演示(tab滚动效果)案例遇到问题先去查api查百度一开始我以为是安卓的功能直接api打开<DemoBlocktitle='超长自动滚动'padding='0'><TabsdefaultActiveKey=......
  • Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析
    1、目的  在一般情况下,对于系统的常规操作如创建进程、创建互斥体、创建文件等可以进行SSDTHook进行拦截,但在x64位系统下,有PG的保护,常规的SSDTHook会导致蓝屏。但基于ObjectType的一些Hook也可以做到相应的功能且不会导致系统BSOD。 2、相关结构分析2.1XP上的相关结构......
  • 【八股cover#2】CPP语法 Q&A与知识点
    CPP语法Q&A与知识点简历cover1、熟练使用C的指针应用及内存管理指针与引用的区别指针是一个存储地址的变量,可以有多级,可以为空,并且在初始化后可以改变指向;引用是原变量的别名,只有一级,不能为NULL,必须在定义时初始化,并且一旦初始化后就不能再改变。指针在作为参数传递时不会......
  • react antd 表头分组渲染的问题记录
    importReact,{useEffect}from'react'import{observer}from'mobx-react'import{get}from'lodash'import{Modal}from'antd'importSelfTablefrom'@/view/common/self_table/self-table'impo......
  • DevOps落地实践点滴和踩坑记录-(2) -聊聊企业内部DevOps平台建设
    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来。这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧。DevOps落地实践点滴和踩坑记录-(1)企业落地DevOps该买商用还是自己研发呢?很多团队刚开始都会问这个问题,我的回......
  • 用日志记录Linux用户执行的每一条命令(history)
    工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器第一种方法第二种......