fn

JS-重写内置的call、apply、bind

情到浓时终转凉″ 提交于 2020-02-27 17:29:33
首先看call和apply,第一个参数就是改变的this指向,写谁就是谁,如果是非严格模式下,传递null或undefined指向的也是window,二者唯一的区别是执行函数时,传递的参数方式不同,call是一个个的传递,apply是把需要传递的参数放到数组中整体传递。   ·func.call([context], x, y)   ·func.apply([context], [x, y]) 再看bind,它和call和apply都是改变this并且传递一些参数,不同于call和apply在改变this的同时直接把函数就执行了,bind不会立即执行函数。 let obj = { fn(x, y) { console.log(this, x, y); } }; obj.fn.call({}, 10, 20); // {}, 10, 20 obj.fn.apply(window, [10, 20]); //window, 10, 20 setTimeout(obj.fn.bind(30, 10, 20), 1000); //Number(30), 10, 20 先试着重写一下bind: 从参数看,首先是传递一个this指向并需要做一下处理,后续还有若干个参数 function bind(context) { //context可能是null或undefined,需要处理一下 if

函数节流

断了今生、忘了曾经 提交于 2020-02-27 02:52:58
在某些高频度触发的事件中绑定操作需要用到节流函数 如在页面大小发生改变时 window.addEventListener("resize",function () { console.log(1) }) 这里并没有涉及到什么复杂的运算,如果我们需要监听页面大小变化执行复杂的运算时,浏览器可能会崩溃。 节流函数封装如下 function throttle(fn,context) { clearTimeout(fn.tId) fn.tId = setTimeout(function () { fn.call(context) },1000) } window.addEventListener("resize",throttle(show)) function show() { console.log(1) } function throttle(fn) { return function () { clearTimeout(fn.tId) fn.tId = setTimeout(fn,1000) } } 来源: CSDN 作者: 叽里咕噜写代码 链接: https://blog.csdn.net/qq_38280242/article/details/104520067

async的用法

不想你离开。 提交于 2020-02-27 01:42:15
async的用法 在前面的博客,我已经把promise详细讲了一遍,后来有人说async更好用一点,所以这篇博客主要是来讲解async,但是要理解async之前要先了解promise,不然要理解起来是很困难的 async也是一个异步的钩子,他里面有一个属性就是 await,而这个await是非常重要的。 用法是这样的,比如你有两个函数想要转成同步,首先建立两个函数,里面返回的是promise对象,也可以不建立函数,直接建立promise对象 然后里面需要包裹着你需要转化成同步的函数 再用async建立一个函数,然后函数里面有await对象,await对象后面要跟着promise的对象 然后async里面的执行步骤是从上到下,调用async的函数时后面可以加一个then,作用和promise对象相同。 async的主要作用是回调地狱的处理看起来比promise更美观,而且使用async来传参的时候比较方便 async函数必须要等到方法体中所有的await声明Promise函数执行完后,async函数才会得到一个resolve状态的Promise对象。 如果在执行async中的异步函数的过程中,一旦有一个异步函数出现错误,整个async函数就会立即抛出错误,但是如果在async函数中对异步函数通过try/ catch封装,并在catch方法体中返回Promise.reject()

前端基础之jquery

旧城冷巷雨未停 提交于 2020-02-26 04:56:44
知识预览: 什么是jQuery 什么是jQuery对象 寻找元素(选择器和赛选器) 操作元素(属性,css,文档处理) 扩展方法 参考资料: jQyery中文文档 回到顶部 一 jQuery是什么? jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。 jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE! 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互。 jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 回到顶部 二 什么是 jQuery 对象? jQuery 对象就是通过 jQuery 包装 DOM 对象后产生的对象。 jQuery 对象是 jQuery 独有的 . 如果一个对象是 jQuery 对象 , 那么它就可以使用 jQuery 里的方法 : $(“#test”).html(); $("#test").html() 意思是指

回顾前端JQuery

倖福魔咒の 提交于 2020-02-26 04:54:05
二.jQuery是什么 jQuery由美国人John Resig创建,至今已经吸引了来自实践各地的众多javascript高手加入其team jQuery是继prototype之后又一个优秀的JavaScript框架,其宗旨是----WRITE LESS,DO MORE! 它是轻量级的JS库(压缩后只有21K),这是其他JS库所不及的,它兼容CSS3,还兼容各种浏览器 jQuery是一个快速的,简洁的JavaScript库,使用户能更方便处理HTMLdocuments,events,实现动画效果,并且方便地为网站提供Ajax交互 jQuery还有一个比较大的优势是,他的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择 三什么是jQuery对象 jQuery 对象就是通过 jQuery 包装 DOM 对象后产生的对象。 jQuery 对象是 jQuery 独有的 . 如果一个对象是 jQuery 对象 , 那么它就可以使用 jQuery 里的方法 : $(“#test”).html(); $("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法 这段代码等同于用DOM实现代码: document.getElementById(" test ").innerHTML;

强化学习 ---baselines项目之 Atari游戏的网络结构解析

二次信任 提交于 2020-02-26 03:11:25
这个baselines项目设计的比较灵活,结构有点复杂。由于项目庞大,各个函数之间又是相互调用,有时候从一个函数追溯下去,可以追溯6,7层,每个函数的超参数又特别多,很容易把人搞晕。 接下来只看DQN部分的源码,其他无关的先不看,沿着一条线分解它!接下来进行一个递归游戏,一层一层的深入探索,探索到尽头再返回,当然中途适当剪剪枝,跟网络图无关的部分先不访问! 首先,我们找 递归入口 ,在deepq下有个 experiments ,这下面全是实例,pong就是一个Atari游戏的实验。 以下是trian_pong的代码 1. from baselines import deepq from baselines import bench from baselines import logger from baselines . common . atari_wrappers import make_atari import numpy as np np . seterr ( invalid = 'ignore' ) def main ( ) : logger . configure ( ) env = make_atari ( 'PongNoFrameskip-v4' ) env = bench . Monitor ( env , logger . get_dir ( ) ) env =

jquery动画效果

半城伤御伤魂 提交于 2020-02-26 01:26:15
1.基本效果 show([s,[e],[fn]]) 显示 hide([s,[e],[fn]]) 隐藏 toggle([s],[e],[fn]) 显示隐藏切换 不带参数 直接显示隐藏 带参数 speed easing fn 不建议带speed easing fn 指动画完成之后 2.滑动 slideDown([s],[e],[fn]) slideUp([s,[e],[fn]]) slideToggle([s],[e],[fn]) 3.淡入淡出 fadeIn([s],[e],[fn]) 淡入 fadeOut([s],[e],[fn]) 淡出 fadeTo([[s],o,[e],[fn]]) 透明度的动画 fadeToggle([s,[e],[fn]]) 4自定义 animate(p,[s],[e],[fn])1.8 params 属性 speed easing fn stop([c],[j])1.7 停止当前正在执行的动画 delay(d,[q]) 延迟后续动画的执行 finish([queue])1.9+ <body> <button class="btns">start</button> <button class="btnp">stop</button> <button class="btnf">finish</button> <ul> <li><span>mousedown([

JS中this的几种情况

六月ゝ 毕业季﹏ 提交于 2020-02-25 19:27:12
1.给元素的某个事件行为绑定方法,事件触发,方法执行,此时方法中的this一般都是当前元素本身: <div id="div"></div> div.onclick = function() { console.log(this); //=><div id="div"></div> }; div.addEventListener('click', function () { console.log(this); //=><div id="div"></div> }, false); 这里边有个特殊情况就是DOM2级绑定事件 div.attachEvent('onclick',function anonymous(){ console.log(this); //=>window }); 2.普通函数执行,它里边的this是谁,取决于方法执行前面是否有“.”,有的话,“.”前面是谁this就是谁,没有的话并且是在非严格模式下this就是window,严格模式下是undefined: function fn() { console.log(this); } let obj = { name: 'OBJ', fn: fn }; fn(); //window obj.fn(); //{name: 'OBJ',fn: fn} 3.构造函数执行(也即是new执行),函数中的this是当前类的实例:

js、jquery实用小技巧集合

青春壹個敷衍的年華 提交于 2020-02-23 05:00:28
Tip16:JS的定时器   JS 中有两种定时器,setTimeout('fn', t) 和 setInterval('fn', t),'fn'指的是定时执行的方法名,字符串类型。   setTimeout('fn', t): 只执行一次,执行完成后将销毁。   setInterval('fn', t):一直执行。 (Date:2012-02-17) ----------------------------------------------------------------- Tip15:Jquery触发回车事件 $(function () { $('#target').bind('keyup', function (event) { if (event.keyCode == 13) { alert("Hello~"); } }); }); (Date:2011-10-28) ----------------------------------------------------------------- Tip14:获得select 的值   jquery可以像获取textbox值一样获取select的值:$('select').val(); (Date:2011-10-19) ------------------------------------------------

pytorch 自动求梯度

守給你的承諾、 提交于 2020-02-22 22:41:32
自动求梯度 在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的 autograd 包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。 概念 上一节介绍的 Tensor 是这个包的核心类,如果将其属性 .requires_grad 设置为 True ,它将开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度传播了)。完成计算后,可以调用 .backward() 来完成所有梯度计算。此 Tensor 的梯度将累积到 .grad 属性中。 注意在 y.backward() 时,如果 y 是标量,则不需要为 backward() 传入任何参数;否则,需要传入一个与 y 同形的 Tensor 。 如果不想要被继续追踪,可以调用 .detach() 将其从追踪记录中分离出来,这样就可以防止将来的计算被追踪,这样梯度就传不过去了。此外,还可以用 with torch.no_grad() 将不想被追踪的操作代码块包裹起来,这种方法在评估模型的时候很常用,因为在评估模型时,我们并不需要计算可训练参数( requires_grad=True )的梯度。 Function 是另外一个很重要的类。 Tensor 和 Function 互相结合就可以构建一个记录有整个计算过程的有向无环图