js之惰性函数

时间: 2018-12-16阅读: 1599标签: 函数

惰性函数js函数式编程的另一个应用,惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,他的应用情景在于当我们遇到一个需要判断场景去调用不同的方法时,避免重复进入函数内的if判断,也就是说if判断只进行一次,之后函数就会被分支里的代码替换掉。


我们先看个例子

function a() {
	console.log("this is a");
}
function a() {
	console.log("this is other a");
}
a(); //输出this is other a//同名函数被覆盖


js中,不能存在同名函数,因为在创建词法作用域时,函数声明就会被提前,所以上面的例子中只输出this is other a。

我们再看下面这个例子

function b() {
	console.log('b');
	b1 = function() {
		console.log('other b');
	}
}
b(); // 执行第一个b函数
b1(); // 执行第二个函数


我们可以看见这里执行了连个函数,b和b1 如果把b1换成b的话,我们就可以达到重写b的目的,利用这步,我们就可以得到惰性函数

function person(name) {
	if(name == "jack") {
		return person = function() {
			console.log("this is jack");
		}
	} else if(name == "tom") {
		return person = function() {
			console.log("this is tom");
		}
	} else {
		return person = function() {
			console.log("this is others");
		}
	}
}
person("jack")();
console.log(1);
person();


这里我们可以看出来,当第一次执行完person函数后,他就被后面的person函数替代了,此时的person函数只剩下console这个输出了,这里就是一个惰性函数的小例子

那么惰性函数的实际应用在那里呢,我们可以从实际的dom操作中感受,添加监听事件的方法有两种,ie和其他的

function addEvent(type, element, fun) {
    if (element.addEventListener) {
        element.addEventListener(type, fun, false);
    }
    else if(element.attachEvent){
        element.attachEvent(‘on‘ + type, fun);
    }
    else{
        element[‘on‘ + type] = fun;
    }
}

这个函数会在每次运行时根据浏览器的不同选定相应的监听器,但每次运行时所有的代码都要跑一遍,这明显不够好,我们可以利用函数重写,当函数第一次运行时,我们就判断出来了浏览器支持哪种监听器,以后只要将方法替换当前的方法就可以了

function addEvent(type, element, fun) {
    if (element.addEventListener) {
        addEvent = function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if(element.attachEvent){
        addEvent = function (type, element, fun) {
            element.attachEvent(‘on‘ + type, fun);
        }
    }
    else{
        addEvent = function (type, element, fun) {
            element[‘on‘ + type] = fun;
        }
    }
    return addEvent(type, element, fun);
}

如上,就可以实现惰性函数的特性,只执行一次。


原文:https://www.cnblogs.com/maoxiaodun/p/10125081.html  

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1612

nodejs如何调用函数?

NodeJs中调用函数的方式有多种,可以在内部调用普通函数,还可以调用外部单个函数以及调用外部多个函数等。普通内部函数可以直接调用,外部函数需要先使用module.exports=fun将函数导出,然后就可以直接调用了。

工作中常用的JavaScript函数片段

返回已 size 为长度的数组分割的原数组;检查数组中某元素出现的次数;扁平化数组默认 depth 全部展开;对比两个数组并且返回其中不同的元素

10个实用的工具函数

生成一周时间:new Array 创建的数组只是添加了length属性,并没有实际的内容。通过扩展后,变为可用数组用于循环;判断核心使用Object.prototype.toString,这种方式可以准确的判断数据类型。

初识云函数

什么是云函数?云函数提供了一种直接在云上运行,无状态的、短暂的、由事件触发的代码的能力,云函数与轻服务的关系:云函数,就是FaaS模式的具体实现。同样,对象存储、数据库应用、缓存服务等,是BaaS模式的具体实现。对于轻服务,BaaS和FaaS缺一不可

js中sort函数用法总结_sort排序算法原理

js中sort方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。如果要得到自己想要的结果,不管是升序还是降序,就需要提供比较函数了。该函数比较两个值的大小,然后返回一个用于说明这两个值的相对顺序的数字

CSS之calc()

calc() 函数支持任意CSS长度单位的混合计算,遵循标准数学运算优先级规则,可以动态计算长度值。注意,calc()函数内部的运算符两侧各加一个空白符,否则会产生解析错误。calc()使用的难点在于百分比

Js函数式编程,给你的代码增加一点点函数式编程的特性

给你的代码增加一点点函数式编程的特性,最近我对函数式编程非常感兴趣。这个概念让我着迷:应用数学来增强抽象性和强制纯粹性,以避免副作用,并实现代码的良好可复用性。同时,函数式编程非常复杂。

理解与使用JavaScript中的回调函数

在JavaScript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回。

如何写一个作用域安全的构造函数

构造函数本质上就是一个使用new操作符调用的函数,当多个人一同构建一个项目时,作用域构安全函数就非常必要,对全局对象意外的更改可能就会导致一些常常难以追踪的错误,这和平常设置空变量和空函数一样避免因为其他人可能发生的错误而阻塞程序执行。

工作中常用的 JavaScript 函数片段

查找数组最小,同上,不明白为什么要分成两个题目。Math.max 换成 Math.min,s>n?s:n 换成 s<n?s:n,(n,m)=>m-n 换成 (n,m)=>n-m,或者直接取最后一个元素

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!