May-周记(1)

2023-05-16

1.封装一个ajax

// 封装一个ajax原生写法
  function ajax(opts){
     // 1. 创建一个客户端请求服务器
      var  xhr=new XMLHttpRequest();
      // 2. 建立连接的地址
      // xhr.open('GET','/api/a.js',false);
      // 3. 客户端请求服务器发送数据
      // xhr.send(null);
       // 客户端请求数据
      var urlStr=''
      for(var key in opts.data){
        urlStr +=`${key}=${opts.data[key]}&`
      }
      urlStr=urlStr.substring(0,urlStr.length-1);
      // 判断type的值发送数据
      if(opts.type.toLowerCase()==='get'){
        xhr.open('GET',opts.url+'?'+urlStr,true);
        xhr.send();
      }
      if(opts.type.toLowerCase()==='post'){
        xhr.open('GET',opts.url+'?'+urlStr,true);
        xhr.sendRequestHeader('Content-type','application/x-www-form-urlencoded');
        xhr.send(urlStr);
      }
      // 4. 收到数据后监听状态的改变
      /**readyState   对象状态值 一旦改变就触发onreadystatechange()函数

0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化) 对象已建立,尚未调用send方法

2 (发送数据) send方法已调用,但是当前的状态及http头未知

3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据 */
      xhr.onreadystatechange=function(){
        if(xhr.readyState==4){
          if(xhr.status==200){//建立通信成功
            // console.log(xhr.responseText); 从服务器进程返回数据的字符串形式。
            opts.success(JSON.parse(xhr.responseText));
          }
        }else if(xhr.readyState==4&&xhr.status!==200){
          opts.error()
        }
      }
     
     }
 

  btn.addEventListener('click',function(){
    ajax({
      url:'1.json',
      type:'POST',
      success:function(data){
        console.log(data); 
      },
      error:function(error){
        console.log('发生了错误...'); 
      }  
    })
  },false)
复制代码

2.判断两个对象相等

var obj={
  a:1
}
var obj1={
  a:1
}
var obj2={
  a:2
}
// console.log(JSON.stringify(obj)===JSON.stringify(obj2));
复制代码

3. 经典引用

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a.x) 	//undefined
console.log(b.x) //{n:2}
/**1、优先级。.的优先级高于=,所以先执行a.x,堆内存中的{n: 1}就会变成{n: 1, x: undefined},改变之后相应的b.x也变化了,因为指向的是同一个对象。
2、赋值操作是从右到左,所以先执行a = {n: 2},a的引用就被改变了,然后这个返回值又赋值给了a.x,需要注意的是这时候a.x是第一步中的{n: 1, x: undefined}那个对象,其实就是b.x,相当于b.x = {n: 2} */
复制代码

4.经典闭包

var data = [];

for (var i = 0; i < 3; i++) {
  data[i]=(function(j){
    return function(){
      console.log(j);
    }
  })(i)

//   (function (j) {
//     data[i]= function(){
//         console.log(j);
//     }
// })(i);
  
}

data[0]();//0
data[1]();//1
data[2]();//2

2 for(var i=0;i<btns.length;i++){
    btns[i].onclick = (function(tmpI){
       return function(){
            console.log(tmpI+1);
       } 
    })(i);
}
复制代码

5.arguments 对象

/**arguments对象 */
function bar() {
  Constructor = [].shift.call(arguments);
  console.log( Constructor);//1
  console.log(arguments);//[Arguments] { '0': 2, '1': 3 }
  for(var i=0;i<arguments.length;i++){
    console.log(arguments[i]);
  }
}
bar(1,2,3);[1,2,3]
 arguments = {
       0: 'foo',
       1: 'kevin',
       2: 18,
       length: 3
  }
  // 因为arguments是类数组对象,所以可以用for循环
  var args = [];
  for(var i = 1, len = arguments.length; i < len; i++) {
      args.push(`${arguments[i]}`)
  }
  console.log(args.toString());//'kevin,18'
复制代码

6.事件冒泡

 function bindEvent(el,type,fn){
    el.addEventListener(type,fn)
  }
  var a=document.getElementById('link');
  bindEvent(a,'click',function(e){
    e.stopPropagation();//阻止冒泡行为,触发父级的click函数行为
    e.preventDefault();//阻止默认跳转行为
    alert('3')
  })
复制代码

7. 解决跨域的几种方式 CMD Common.js区别 性能优化 安全性 xss 事件节流

转载于:https://juejin.im/post/5ce219cbf265da1b7e100845

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

May-周记(1) 的相关文章

随机推荐

  • JNA 实际开发中若干问题解决方法(二)

    1 JNA 中 byte 类型映射问题 在之前的文章中 xff0c 我们知道 JNA 中 xff0c char 和 char 类型都可以映射为 byte 类型 xff0c 通常来说也就是 byte 具有通用性 在实际开发中 xff0c 我们
  • 独家解读 | 智能驾驶视觉技术领域四类供应商及其商业化路径

    9 月 3 日 xff0c 雷锋网新智驾正式对外发布了 2018 智能驾驶视觉技术行业研究报告 xff0c 对智能驾驶技术感兴趣的读者可加入 新智驾会员计划 免费阅读本报告 xff0c 也可以通过官方渠道单独购买后进行查阅 首份报告发布两天
  • MySQL存储过程与存储函数

    1 创建存储过程 存储过程就是一条或者多条 SQL 语句的集合 xff0c 可以视为批文件 它可以定义批量插入的语句 xff0c 也可以定义一个接收不同条件的 SQL 创建存储过程的语句为 create procedure xff0c 创建
  • Vue+SpringBoot实现增删改查

    Vue 43 Spring boot Vue前端 Vue新建项目 当前我是用的是vue脚手架3 4 1版本 github地址 xff1a github com liangcongco vue create vue demo 新建项目 spa
  • 一例关于无法删除VMware虚拟机文件的案例

    关键字 xff1a VMware ESXi 虚拟机 操作背景 xff1a 由于运维不当导致一台虚拟机挂掉 xff0c 期望删除该VM的文件夹 xff0c 但从vCenter界面或者用指令界面 xff0c 均提示无法删除 xff0c 文件被占
  • PS安装扩展面板提示无法加载,因为它未经正确签署解决方法(适用于Mac/Win)

    最近发现好多小伙伴在使用Photoshop Mac端或者win端安装ps扩展面板时 总会遇到Photoshop错误提示无法加载 因为它未经正确签署 今天小编就和大家分享解决Mac Win端ps扩展面板提示无法加载 因为它未经正确签署解决方法
  • FTP连接不上的解决方法

    1 注意内网IP和外网IP 2 检查ftp服务是否启动 xff08 面板首页即可看到 xff09 3 检查防火墙20端口 ftp 21端口及被动端口39000 40000是否放行 xff08 如是腾讯云 阿里云等还需检查安全组 xff09
  • Arduino和C51开发OLED显示屏

    技术 xff1a 51单片机 Arduino OLED显示屏 U8glib 概述 OLED显示屏常常用作为智能产品的显示设备 xff0c 本文简单介绍OLED显示屏的使用方法 详细 代码下载 xff1a http www demodashi
  • mac 查看 本地网络代理

    networksetup listallnetworkservices 转载于 https www cnblogs com yshuai p 7813258 html
  • 常用的ROS命令

    在这里记一下 xff0c 以免以后忘记了 打开ros master xff1a roscore 查看topic列表 xff1a rostopic list v 打印topic内容 xff1a rostopic echo topic 将bag
  • platform下的js分析_2

    目录 主要包含 url js utils js requiring frame js attribute js CCMacro js CCSys js CCScreen js CCVisibleRect js callbacks invok
  • 重学前端学习笔记(六)--JavaScript类型有哪些你不知道的细节?

    笔记说明 重学前端是程劭非 xff08 winter xff09 前手机淘宝前端负责人 在极客时间开的一个专栏 xff0c 每天10分钟 xff0c 重构你的前端知识体系 xff0c 笔者主要整理学习过程的一些要点笔记以及感悟 xff0c
  • 用nvm安装node后,发现npm下载总是失败的解决办法

    用nvm安装node后 xff0c 发现npm下载总是失败的解决办法 执行安装命令如下出现npm下载失败 xff0c 尝试多次都不成功 xff1a C windows system32 gt nvm install 14 17 3 Down
  • OpenStack —— DevStack一键自动化安装

    一 DevStack介绍 Devstack 目前是支持Ubuntu16 04和CentOS 7 xff0c 而且Devstack官方建议使用Ubuntu16 04 xff0c 所以我们使用Ubuntu 16 04进行安装 默认无论是Devs
  • 树莓派3b+安装

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 贴散热片 xff1a 背面一片 xff0c 正面两篇 二 系统安装 xff1a 1 使用SD Formatter格式化SD卡 2 使用Win32DiskImager写入
  • Amap地图轨迹

    最近在做运动相关的项目 xff0c 需要运动轨迹 xff0c 接了一下Google xff0c 头一天还能获取Location xff0c 之后就没法用了 xff0c 所以换成高德 xff0c 高德的地图包Amap 使用高德地图定位Loca
  • 实现一个最小的 CSS 响应式布局系统

    阳光里她在院子中央晾晒着衣裳 在四季的风中她散着头发安慰着时光 赵雷 南方姑娘 响应式布局系统 xff0c 在现在流行的 CSS 框架中已经非常常见了 它主要由容器类和约定一行列数的栅格系统组成 xff0c 组成了一个框架的骨架 在流行的前
  • 写了一个拖动排序插件

    drag js drag js是一款拖动排序插件 xff0c 适配pc端和手机端 demo地址 tls1234 github io drag html 结构 lt ul class 61 34 item group 34 gt lt li
  • 关于工程效能的思考

    继阿里大中台之后 xff0c 现在的科技公司大多有一支致力于提升公司研发效率和沟通协作的工程效能团队 xff0c 作为这样团队的一员 xff0c 却看到愿景和现实激烈碰撞 xff0c 不禁有如下思考 效率的提升并不能减少工作时长 就拿前端研
  • May-周记(1)

    1 封装一个ajax span class hljs comment 封装一个ajax原生写法 span span class hljs function span class hljs keyword function span span