js只执行1次的函数示例
在我们日常开发的时候,经常会碰到一种这样的情况:想让某个函数只执行一次,特别是在一些循环或定时执行的时候。
废话不多说,直接上代码:
function runOnce(fn, context) { //控制让函数只触发一次 return function () { try { fn.apply(context || this, arguments); } catch (e) { console.error(e);//一般可以注释掉这行 } finally { fn = null; } } } // Usage 1: var a = 0; var canOnlyFireOnce = runOnce(function () { a++; console.log(a); }); canOnlyFireOnce(); //1 canOnlyFireOnce(); // nothing canOnlyFireOnce(); // nothing // Usage 2: var name = "张三"; var canOnlyFireOnce = runOnce(function () { console.log("你好" + this.name); }); canOnlyFireOnce(); //你好张三 canOnlyFireOnce(); // nothing // Usage 3: var obj = {name: "天涯孤雁", age: 24}; var canOnlyFireOnce = runOnce(function () { console.log("你好" + this.name); }, obj); canOnlyFireOnce(); //你好天涯孤雁 canOnlyFireOnce(); // nothing
因为返回函数执行一次后,fn = null将其设置未null,所以后面就不会执行了。再贴一个网上别人分享的代码,道理一样的:
function once(fn, context) { var result; return function() { if(fn) { result = fn.apply(context || this, arguments); fn = null; } return result; }; } // Usage var canOnlyFireOnce = once(function() { console.log('Fired!'); }); canOnlyFireOnce(); // "Fired!" canOnlyFireOnce(); // nothing
以上就是为大家整理让javascript只执行一次的函数示例,有需要的可以参考。
相关推荐
-
JS实现判断滚动条滚到页面底部并执行事件的方法
需要了解三个dom元素,分别是:clientHeight.offsetHeight.scrollTop. clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那个这个高度则是不包括滚动条没显示出来的下面部分的内容.而只是单纯的DIV的高度. offsetHeight:是指元素内容的高度.依照上面的,那这个高度呢就是DIV内部的高度,包括可见部分及以滚动条下面的不可见部分. scrollTop:这个是什么呢?他可以理解为滚动条可以滚动的长度. 举例,如果一个
-
javascript三元运算符用法实例
三元运算符用法实例: 如名字表示的三元运算符需要三个操作数. 语法是 条件 ? 结果1 : 结果2;. 这里你把条件写在问号(?)的前面后面跟着用冒号(:)分隔的结果1和结果2.满足条件时结果1否则结果2. 复制代码 代码如下: <script type="text/javascript"> var b=5; (b == 5) ? a="true" : a="false"; document.write(" --------
-
Javascript 按位取反运算符 (~)
复制代码 代码如下: result = ~ [数字] 所有一元运算符(如 ~ 运算符)都按照下面的规则来计算表达式的值: 复制代码 代码如下: 1. 如果应用于未定义的表达式或 null 表达式,则会引发一个运行时错误.2. 将对象转换为字符串.3. 如果可能,将字符串转换为数字. 否则,将引发运行时错误.4. 布尔值被视为数字(如果为 false,则为 0:如果为 true,则为 1). 运算符将应用于结果数字. ~ 运算符查看表达式的二进制表示形式的值,并执行位非运算. 表达式中的任何一位为
-
window.addEventListener来解决让一个js事件执行多个函数
可能你也碰到过这种情况,就是在js的代码中用了window.onload后,可能会影响到body中的onload事件.你可以全写在body中,也可以全放到window.onload中,但是这样并不是很方便,有时我们需要两个同时用到.这时就要用window.attachEvent和window.addEventListener来解决一下. 下面是一个解决方法.至于attachEvent和addEventListener的用法,可以自己Google或百度一下. 复制代码 代码如下: if (docu
-
js 把字符串当函数执行的方法
并且用js去执行: function test(str){ alert(str); } window['test']('aaaaaaaaaaaaaaaaaaaaa'); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] ------------------------------- 方法一... function test(str){ alert(str); } eval('test("aaaaaaaaaaaaaaaaaaa")'); [Ctrl+A 全选 注:如需引入外部J
-
js 程序执行与顺序实现详解
函数的声明和调用 JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行.函数的定义方式大体有以下两种,浏览器对于不同的方式有不同的解析顺序. 代码如下: 复制代码 代码如下: //"定义式"函数定义 function Fn1(){ alert("Hello World!"); } //"赋值式"函数定义 var Fn2 = function(){ alert("Hello wild!"); } 页面加载过程中
-
Js中setTimeout()和setInterval() 何时被调用执行的用法
定义setTimeout()和setInterval()经常被用来处理延时和定时任务.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除.从定义上我们可以看到两个函数十分类似,只不过前者执行一次,而后者可以执行多次,两个函数的参数也相同,第一个参数是要执行的code或句柄,第二个是延迟的毫秒数.很简单的定义,使用起来也很简单,但有时候我们的代码并不是按照我们的想象
-
JS中三目运算符和if else的区别分析与示例
今天写了一个图片轮播的小demo,用到了判断 先试了一下if else,代码如下: 复制代码 代码如下: if(n >= count-1){ n =0; }else{ n ++; } 随后代码写完了,准备优化一下代码,将此段改成了三目运算符的写法 复制代码 代码如下: n = n >= (count-1) ? n=0 : n++ 结果完全不同 随后研究了一下这两者的区别,总结为一句话:三目运算有返回值,if else没有返回值 做了如下测试: 复制代码 代码如下: var n=1; if(n
-
JavaScript中常用的运算符小结
一.一元运算符 1.delete 运算符:删除对以前定义的对象属性或方法的引用.例如: var o=new Object; o.name="superman"; alert(o.name); //输出 "superman" delete o.name; alert(o.name); //输出 "undefined" 删除了name属性,将其设置为undefined(即创建的未初始化的变量的值).delete不能删除开发者未定义(即ECMAScri
-
页面加载完成后再执行JS的jquery写法以及区别说明
1.$(function(){ $("#a").click(function(){ //adding your code here }); }); 2.$(document).ready(function(){ $("#a").click(function(){ //adding your code here }); }); 3.window.onload = function(){ $("#a").click(function(){ //add
-
js定时器(执行一次、重复执行)
1,只执行一次的定时器 复制代码 代码如下: <script> //定时器 异步运行 function hello(){ alert("hello"); } //使用方法名字执行方法 var t1 = window.setTimeout(hello,1000); var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 window.clearTimeout(t1);//去掉定时器 </scrip
-
页面加载完后自动执行一个方法的js代码
1.在body中用onload: <body onload="myfunction()"> 2.在脚本中用window.onload: <script type="text/javascript"> function myfun() { alert("this window.onload"); } /*用window.onload调用myfun()*/ window.onload=myfun;//不要括号 </scr
-
js利用与或运算符优先级实现if else条件判断表达式
复制代码 代码如下: <script type="text/javascript"> /******************************************************************* 利用运算符优先级实现ifelse表达式 result = expression1 && expression2 当且仅当两个表达式的值都等于 True 时, result 才是 True. 如果任一表达式的值等于 False, 则 res
-
浅谈JavaScript中运算符的优先级
运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出JavaScript运算符.具有相同优先级的运算符按从左至右的顺序求值. 运算符 描述 . [] () 字段访问.数组下标.函数调用以及表达式分组 ++ -- - ~ ! delete new typeof void 一元运算符.返回数据类型.对象创建.未定义值 * / % 乘法.除法.
-
js函数setTimeout延迟执行的简单介绍
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: code (必需):要调用的函数后要执行的 JavaScript 代码串. millisec(必需):在执行代码前需等待的毫秒数. 提示: setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout().实例: 复制代码 代码如下: function timed
-
js 与或运算符 || && 妙用
首先出个题:如图: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头: 成长速度为10显示2个箭头: 成长速度为12显示3个箭头: 成长速度为15显示4个箭头: 其他都显示都显示0各箭头. 用代码怎么实现? 差一点的if,else: Js代码 复制代码 代码如下: var add_level = 0; if(add_step == 5){ add_level = 1; } else if(add_step == 10){ add_level = 2; } else if(add_step
-
js的逻辑运算符 ||
因而查询一下js的介绍: 1.逻辑或运算符||: 当运算符||的两个运算数都是布尔值,它对这两个运算数执行布尔OR操作. 它先计算第一个运算数,如果这个表达式的值可以被转换成true,那么它就返回左边这个表达式的值.否则计算第二个运算数 即使||运算符的运算数不是布尔值,任然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值. 而且另一方面,对非布尔型的运算数使用了||,这是利用了它对非布尔型的值会将其返回的特性.该运算符的这一用法通常是选取一组备选值中的第一个定义了的
-
如何让页面加载完成后执行js
javascript 当页面dom模型加载完成后才执行javascript不能使用<body onload="">加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/x
-
javascript typeof的用法与typeof运算符介绍[详细]第1/2页
经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组. if(document.mylist.length != "undefined" ) {} 这个用法有误. 正确的是 if( typeof(document.mylist.length) != "undefined" ) {} 或 if( !isNaN(document.mylist.length) ) {} typeof的运算数未定义,返回的就是 "
随机推荐
- Go语言创建、初始化数组的常见方式汇总
- 浅谈网页中的相对路径和绝对路径
- PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
- MVC项目结构搭建及单个类的实现学习笔记1
- Android时光轴实现淘宝物流信息浏览效果
- js压缩工具 yuicompressor 使用教程
- 教你如何在MySQL命令行中使用SQL语句的规则
- 实例讲解jquery中mouseleave和mouseout的区别
- jQuery插件zTree实现单独选中根节点中第一个节点示例
- jQuery的三种$()
- PHP4实际应用经验篇(7)
- java 查找list中重复数据实例详解
- Java 蒙特卡洛算法求圆周率近似值实例详解
- 新浪新闻小偷
- Vue-cli-webpack搭建斗鱼直播步骤详解
- 简单理解Spring之IOC和AOP及代码示例
- PHP实现数据库的增删查改功能及完整代码
- 查看TensorFlow checkpoint文件中的变量名和对应值方法
- 详解微信小程序文件下载--视频和图片
- Go返回int64类型字段超出javascript Number范围的解决方法