fn

js执行上下文 this指向的理解

心不动则不痛 提交于 2019-12-04 17:43:50
this 是很多人会混淆的概念,但是其实它一点都不难,只是网上很多文章把简单的东西说复杂了。在这一小节中,你一定会彻底明白 this 这个概念的。 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁 , 实际上this的最终指向的是那个调用它的对象( 这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉 ) 例子1: 按照我们上面说的this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的,下面的代码就可以证明。 看到a可以通过window点出来,说明this指向的是window 例子: 这里的this指向的是对象o,因为你调用这个fn是通过o.fn()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。 其实例子1和例子2说的并不够准确,下面这个例子就可以推翻上面的理论。 如果要彻底的搞懂this必须看接下来的几个例子 这段代码和上面的那段代码几乎是一样的,但是这里的this为什么不是指向window,如果按照上面的理论,最终this指向的是调用它的对象,这里先说个而外话

前端Vue框架(三)

半城伤御伤魂 提交于 2019-12-04 15:38:49
子组件补充 子组件案列 <!DOCTYPE html> <html lang="en"> <head> <meta charset='UTF-8'> <title>子组件案例</title> <style> .wrap { width: calc(200px * 4 + 80px); margin: 0 auto; user-select: none; } .box { width: 200px; height: 360px; /*border: 1px solid black;*/ background-color: rgba(10, 200, 30, 0.5); border-radius: 10px; float: left; margin: 10px; } .box img { width: 100%; /*height: 200px;*/ border-radius: 50%; /*width:10%;*/ /*height:15%;*/ float:right; /*margin-left:20px;*/ } .b1{ text-align: center; } </style> </head> <body> <div id="app"> <div class="wrap"></div> <my-tag1 ></my-tag1> <my-tag2 ></my-tag2>

async和await的用法

梦想的初衷 提交于 2019-12-04 13:56:06
  function fn(){   return "aa";   }   console.log(fn()) 如果直接写个函数return一个值,那么打印的肯定就是aa。 async function fn(){ return "aa"; } console.log(fn()) 使用async就是在函数前面加一个async,这样打印出来的就是一个promise对象,而不是之前那个具体的值。 async function fn(){ return "aa"; } console.log(fn()) fn().then(function(data){ console.log(data)  // aa }); 如果想要获取fn()的值,就要用then()方法去获取。 awiat必须在使用async的情况下才能使用,它的作用是阻断主函数的执行,等待异步执行的结果返回后才会向下继续执行。 function fn(){ return new Promise((resolve)=>{ setTimeout(()=>{ console.log(1111) resolve(); },2000); }); } async function fn1(){ await fn(); setTimeout(()=>{ console.log(2222); },1000); } fn1();// 执行结果

自定义事件

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 08:46:19
//新学的一个自定义事件方法 class MyEvent { constructor() {    //给实例化对象添加一个’handle‘属性 值为数组,里面存放自己的函数 类似 let handle = { "myevnet":[fn1,fn2,fn3.....] }; this.handle = { }; }   //绑定(添加)事件 参数:事件名,方法名 addEvent(eventName, fn) {     //判断 如果这个事件不存在 给它变为一个空数组 if (typeof this.handle[eventName] === 'undefined') { this.handle[eventName] = []; }     //如果有的话就把fn这个方法放进数组 this.handle[eventName].push(fn); }   //触发事件 trigger(eventName) {     //遍历 handle 里面对应的事件 让event (每一项即对应的方法)执行 this.handle[eventName].forEach(event => { event && event();//存在并执行 }) }   //移出事件 参数:事件名,方法名 removeEvent(eventName, fn) {    //遍历 handle 里面的事件

第四阶段:Vue框架 day72 Vue--初始Vue(二)

蹲街弑〆低调 提交于 2019-12-04 06:53:55
目录 昨日内容复习 今日学习内容 今日作业 A作业(必做) B作业(选做) 昨日内容复习 1、导入vue环境 在html页面中用script标签导入vue环境 2、创建挂载点 new Vue({ el: "#app" })挂载页面标签,建立关联后控制页面标签 挂载点才有css3选择器语法 挂载点就是vue与页面的关联 挂载点只检索第一个匹配结果 3、插值表达式1 插值表达式{{ }}可以完成基础运算 num | num + 10 | str.split() + "拼接" 4、插值表达式2 插值表达式中的变量有实例成员 data 来提供 {{ msg }} let msg = '12345' new Vue({ el: "#app", data: { msg, } }) 5、事件绑定 v-on指令可以给标签绑定事件,事件函数由实例成员 methods 来提供 6、过滤器 插值表达式{{ 变量 | 过滤器 }}的过滤器由实例成员 filters 来提供 <p id="app" @click="fn">{{ msg | f1(1), 10 | f2(100, 200) }} let msg = '12345' new Vue({ el: "#app", data: { msg, }, methods: { fn(){} }, filters: { f1(v1,v2){return v1

python-获取目录最新更新

℡╲_俬逩灬. 提交于 2019-12-04 06:36:09
#-*- coding: utf-8 -*- __author__ = 'tsbc' import time import datetime import os day = time.strftime('%Y-%m-%d', time.localtime(time.time())) directory = '..\\result\\' #path要获取的文件路径 path = directory+day+"\\" def sortfile(path): fl = os.listdir(path) #获取当前目录文件列表 #时间戳进行倒序排序 fl.sort(key=lambda fn: os.path.getmtime(path + fn) if not os.path.isdir(path + fn) else 0) #date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象 dt=datetime.datetime.fromtimestamp(os.path.getmtime(path + fl[-1])) #dt.strftime("%Y年%m月%d日 %H时%M分%S秒" 将date对象格式化显示 print('最后改动的文件是: '+fl[-1]+",时间:"+dt.strftime("%Y年%m月%d日 %H时%M分%S秒"))

《串并行数据结构与算法(SML语言)实验》题解

江枫思渺然 提交于 2019-12-04 05:47:02
注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关。 第一题: 题意: 对n个数升序排序。 题解: 快排,不解释。 代码(省略了输入输出函数,下同): 1 val n = getInt (); 2 val l = getIntTable (n); 3 fun qsort [] = [] 4 | qsort l' = let 5 val p = hd l'; 6 val l1 = List.filter (fn x => x < p) l'; 7 val l2 = List.filter (fn x => x = p) l'; 8 val l3 = List.filter (fn x => x > p) l'; 9 in qsort(l1) @ l2 @ qsort(l3) end; 10 printIntTable (qsort l); 第二题: 题意: 单源最短路,点数1000以内,边数3000以内。 题解: 实在想不出SML语言怎么写邻接表,考虑到点数只有1000,所以直接用邻接矩阵,既然如此,优先队列优化也不带了,O(n 2 )水过。 代码: 1 val inf = 0x3fffffff; 2 val n = getInt() and m = getInt() and s = getInt() - 1; 3 val g = Array2.array (n,

你还没搞懂this?

北城余情 提交于 2019-12-04 04:09:26
一、前言 this关键字是JavaScript中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。对于那些没有投入时间学习this机制的JavaScript开发者来说,this的指向一直是一件非常令人困惑的事。 二、了解this 学习this的第一步是明白this既不指向函数自身也不指向函数的词法作用域 ,你也许被这样的解释误导过,但其实它们都是错误的。随着函数使用场合的不同,this的值会发生变化。但总有一条原则就是 JS中的this代表的是当前行为执行的主体 ,在JS中主要研究的都是函数中的this,但并不是说只有在函数里才有this, this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用 。如何的区分this呢? 三、this到底是谁 这要分情况讨论,常见有五种情况: 1、函数执行时首先看函数名前面是否有".",有的话,"."前面是谁,this就是谁;没有的话this就是window function fn(){ console.log(this); } var obj={fn:fn}; fn();//this->window obj.fn();//this->obj function sum(){ fn();//this->window } sum(); var oo={ sum:function(){ console

跨域几种方式

让人想犯罪 __ 提交于 2019-12-04 02:01:06
一、什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象。 当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域 。不同域之间相互请求资源,就算作“跨域”。 例如: http://www.abc.com/index.html 请求 http://www.efg.com/service.php 。 有一点必须要注意: 跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了 。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。 大家可以参照下图,有助于深入理解跨域。 特别说明两点: 第一:如果是协议和端口造成的跨域问题“前台”是无能为力的。 第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会根据域名对应的IP地址是否相同来判断。“URL的首部”可以理解为“协议, 域名和端口必须匹配” 。 二、什么是同源策略及其限制 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。 它的存在可以保护用户隐私信息,防止身份伪造等(读取Cookie)。

【原创】(十)Linux内存管理 - zoned page frame allocator - 5

帅比萌擦擦* 提交于 2019-12-04 01:36:23
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将讨论 memory reclaim 内存回收这个话题。 在内存分配出现不足时,可以通过唤醒 kswapd 内核线程来异步回收,或者通过 direct reclaim 直接回收来处理。在针对不同的物理页会采取相应的回收策略,而页回收算法采用 LRU(Least Recently Used) 来选择物理页。 直奔主题吧。 2. LRU和pagevec 2.1 数据结构 简单来说,每个 Node 节点会维护一个 lrvvec 结构,该结构用于存放5种不同类型的 LRU链表 ,在内存进行回收时,在 LRU链表 中检索最少使用的页面进行处理。 为了提高性能,每个CPU有5个 struct pagevecs 结构,存储一定数量的页面(14),最终一次性把这些页面加入到 LRU链表 中。 上述的描述不太直观,先看代码,后看图,一目了然! typedef struct pglist_data { ... /* Fields commonly accessed by