首页 > 其他分享 >#yyds干货盘点 前端小知识点扫盲笔记记录5

#yyds干货盘点 前端小知识点扫盲笔记记录5

时间:2023-04-07 15:38:09浏览次数:39  
标签:function 知识点 arr img yyds li 干货 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,yyds,li,干货,var,girl
From: https://blog.51cto.com/u_14476028/6176311

相关文章

  • #yyds干货盘点 前端小知识点扫盲笔记记录3
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结localStorage和sessionStoragecookie本身用于浏览器和server通讯。被“借用”到本地存储来的。可用document.cookie='...'来修改。其缺点:存储大小......
  • #yyds干货盘点 前端小知识点扫盲笔记记录
    前言大家好我是歌谣微信公众号关注前端小歌谣带你进入前端巅峰人才交流群MVC和MVVM//在MVVM框架下视图和模型是不能直接通信的,只能通过ViewModel进行交互,它能够监听到数据的变化,//然后通知视图进行自动更新,而当用户操作视图时,VM也能监听到视图的变化,然后通知数据做相应改动,//......
  • 免费分享前端面试题,vue面试题,TypeScript基础知识点 PDF格式
    免费分享前端资料,面试题,电子书接前端开发,带徒弟,一对一教学,远程协助,bug修改微信:......
  • #yyds干货盘点# LeetCode程序员面试金典:四数之和
    题目:给你一个由n个整数组成的数组 nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d <na、b、c和d互不相同nums[a]+nums[b]+nums[c]......
  • #yyds干货盘点# LeetCode面试题:x 的平方根
    1.简述:给你一个非负整数x,计算并返回 x 的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。 示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842...,由......
  • Java基础知识点(抽象类)
    封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。一:抽象方法和抽象类的定义将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不一样,所以,在父类中不能确定的具体的方法体,该方法就可以定义为抽象方法。抽象类:如果一个类中存在抽象方法,那么该类就必须声明抽象类。......
  • Java基础知识点(抽象类)
    封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。一:抽象方法和抽象类的定义将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不一样,所以,在父类中不能确定的具体的方法体,该方法就可以定义为抽象方法。抽象类:如果一个类中存在抽象方法,那么该类就必须声明抽象类。......
  • 肖sir__java_知识点1
    (一)java基础1、JDK>JRE>JVMJDK:英文名称(JavaDevelopmentKit),Java开发工具包。jdk是整个Java开发的核心,它集成了jre和一些好用的小工具。例如:javac.exe,java.exe,jar.exe等。JRE:英文名称(JavaRuntimeEnv1ronmeni,仅1们"的m此其运行时环境。它主要包含两个部分,3vmB.q分的......
  • 关于conda小知识点
    一、关于condaconda是一个流行的开源软件包管理系统和环境管理系统,用于在不同的计算机环境中安装和管理软件包和依赖项。以conda开头的命令通常是conda命令,用于在conda环境中执行各种操作,例如创建、激活、更新和删除环境,安装、升级和删除软件包等。以下是一些常用的conda命令:con......
  • (数据科学学习手札151)速通pandas2.0新版本干货内容
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,前两天pandas正式发布了其2.0.0版本,作为一次大版本更新,pandas针对底层进行了大量的重构以优化性能和稳定性,其有关这次更新内容的说明文档更是洋洋洒洒非常繁......