热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript招式总结

媒介在日常平凡的开辟中,经常会碰到一些特殊情况,就须要一些招式来应对。这里总结一下本身常用到的一些小招式,有不足迎接人人指出。模块varfuc1(function(){varahe

媒介

在日常平凡的开辟中,经常会碰到一些特殊情况,就须要一些招式来应对。这里总结一下本身常用到的一些小招式,有不足迎接人人指出。

模块

var fuc1 = (function() {
var a = 'hello ';
return function(str) {
return a + str;
}
})()
fuc1('world'); // hello world

模块情势的平常情势是:一个定义了私有变量和函数;运用闭包建立能够接见私有变量和函数的特权函数;末了返回这个特权函数,或许把它们保留到一个可接见的处所。

该招式有以下运用场景

谐和异步

代码须要在两个异步fuc1fuc2都实行完毕后再实行,

var manager = (function() {
var count = 0;
return function() {
if(++count === 2){
// logic 3
}
}
})()
function fuc1() {
//...
}
function fuc2() {
//...
}
setTimeout(function() {
fuc1();
manager();
}, 10)
setTimeout(function() {
fuc2();
manager();
}, 10)

兼容测试

var createXHR = (function () {
if(typeof XMLHttpRequest != "undefined") {
return function () {
return new XMLHttpRequest();
}
}else if(typeof ActiveXObject != "undefined") {
return function () {
if(typeof arguments.callee.activeXString != "string") {
var versiOns= ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
i,len;
for(1 = 0, len = versions.length; i try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
}catch(ex){
// ...
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}
}else{
return function() {
throw new Error("NO XHR object available.");
}
}
})();

运用私有变量

var parse = (function() {
var cOnfig= ['I', 'II', 'III', 'IV'];
return function(num) {
return config[num - 1]
}
})()
parse(1); // I
parse(4); // IV

柯里化

柯里化听起来很嵬峨上,但是也就是Currying的音译,万万别被称号吓跑了。
它是把接收多个参数的函数中的参数拆分红两次挪用来通报并返回效果的新函数。
举一个简朴的例子明白一下:

var add = function(a, b) {
return a + b
}
add(1, 2) // 3
var currying = function(a) {
return function(b) {
return a + b
}
}
currying(1)(2) // 3

add 为 接收多个参数的函数,currying是将add中的参数分两次挪用传入并返回效果的新函数。

细致想一想,它实际上是模块的衍生招式。模块的私有变量是预先定义好的,而柯里化是保留第一次挪用时传入的参数为私有变量。因而它俩的区别是私有变量定义机遇差别

下面是一个运用柯里化完成的累加要领

var currying = function (fn) {
var args = [];
return function () {
var innerArgs = Array.prototype.slice.call(arguments);
if(innerArgs.length === 0){
return fn.apply(null, args)
}
args = args.concat(innerArgs);
return arguments.callee;
}
}
var mutil = function () {
var num = 0, i = 0;
while(arguments[i]){
num += arguments[i++]
}
return num
}
var add = currying(mutil);
add(1,2)(3);
add(4);
add(); // 10

函数撙节

某些代码不能够在没有中断的情况下一连反复实行,一切就须要撙节。比方:拖动某DOM元素时,须要动态转变元素的 x y ,就须要用到撙节函数了。

function throttle(method, delay) {
var timer = null;
return function () {
var that = this, args = arguments;
clearTimeout(method.tId);
timer = setTimeout(function () {
method.apply(that, args);
clearTimeout(timer);
}, delay);
}
}
window.Onresize= throttle(resizeHandle, 50)

运用该函数时你会发明一个题目:不停拖动元素的过程当中元素是不动的,只要停留一下元素才随着动。
如许的体验很蹩脚,为了进步机能、改良体验,须要晋级一下撙节函数。设置一个最大时候距离来确保在拖动的过程当中,元素能够追随挪动。

function throttle(method, context, delay, maxInterval) {
var _start,_diff,timer;
return function () {
var that = this,
args = arguments,
_now = +new Date();
clearTimeout(timer);
_start || (_start = _now);
if(_now - _start >= maxInterval){
method.apply(that, args)
}else{
timer = setTimeout(function () {
method.apply(that, args)
}, delay)
}
}
}
window.Onresize= throttle(resizeHandle, 50, 100)

耽误加载处置惩罚

在营业中经常会碰到一些不须要同步处置惩罚的,又比较耗时的逻辑。关于这些逻辑能够采纳数据分块(array chunking)的手艺,小块小块地处置惩罚数组,一般每次一小块。能够建立一个“待办事项”行列,然后运用定时器逐一掏出“事项”,接着设置另一个定时器。

function chunk(array, process, context) {
setTimeout(function() {
var item = array.shift();
process.call(context, item);
if(array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100)
}

影象函数

函数能够将先前操纵的效果记录在某个对象里,从而防止反复运算,比方盘算阶乘函数。

function memoizer(memory, handle) {
return function (n) {
var result = memory[n],
recur = arguments.callee;
// 已运算过则直接返回
if(!result){
result = handle(recur ,n);
memory[n] = result;
}
return result;
}
}
var memory = [1, 1],
factorial = memoizer(memory, function (recur, n) {
return n * recur(n - 1)
});
factorial(4);
console.log(memory); // [1, 1, 2, 6, 24]

(未完待续……)


推荐阅读
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
author-avatar
Annfeliz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有