前端框架选型是企业提升开发效率与用户体验的关键因素
1096
2022-10-06
js中匿名函数和回调函数
匿名函数:
通过这种方式定义的函数:(没有名字的函数)
作用:当它不被赋值给变量单独使用的时候
1.将匿名函数作为参数传递给其他函数
2.定义某个匿名函数来执行某些一次性任务
var f = function (a) { return a;};
回调函数:
function invokeAdd(a, b) { return a() + b();}function one() { return 1;}function two() { return 2;}invokeAdd(one, two);//3
也可以直接用匿名函数来代替:
invokeAdd(function () { return 1; }, function () { return 2; });
可读性更高的写法:
invokeAdd( function () { return 1; }, function () { return 2; });
还可以:
invokeAdd( function () { return 1; }, function () { return 2; });
当将函数A传递给函数B,并由B来执行A时,A就成了一个回调函数(callback function),A如果是一个无名函数,就称为匿名回调函数
回调函数的优势:
1.可以让我们不做命名的情况下传递函数(节省变量名的使用)
2.可以将函数调用操作委托给另一个函数(节省代码编写工作)
3.有助于提升性能
回调函数示例:
需要将一个函数的返回值传递给另一个函数
function multiplyByTwo(a, b, c) { var i, ar = []; for (var i = 0; i < 3; i++) { ar[i] = arguments[i] * 2; } return ar;}
调用:
multiplyByTwo(1,2,3);
结果:
[2, 4, 6]
function addOne(a) { return a + 1;}
调用:
addOne(100);--101
实现三个元素在两个函数之间的传递:
1.定义另一个数组,用来存储来自第一步的结果
var myarr = [];myarr = multiplyByTwo(10, 20, 30);
2.循环遍历每一个元素,分别传递给addOne()
for (var i = 0; i < 3; i++) { myarr[i] = addOne(myarr[i]);}
调用:
myarr; [21, 41, 61]
以上代码的缺点使用了两个循环,需要合二为一:
function multiplyByTwo(a, b, c, callback) { var i, ar = []; for (var i = 0; i < 3; i++) { ar[i] = callback(arguments[i] * 2); }return ar;}
调用:
myarr = multiplyByTwo(1, 2, 3, addOne);
用匿名函数来代替addOne(),可以节省一个额外的全局变量
myarr = multiplyByTwo(1, 2, 3, function (a) { return a + 1;});
即时函数:(在定义后立即调用)
(function () { alert('boo');})();
只需要将匿名函数的定义放进一对括号中,然后外面紧跟一对括号即可。第二对括号起到“立即调用”的作用,也是我们向匿名函数传递参数的地方
(function (name) { alert('Hello' + name + '!');} )('dude');
使用匿名函数的好处是不会产生任何全局变量,缺点是这样的函数是无法重复执行的(除非放在某个循环或其他函数中),使的即时函数非常适合执行一些一次性的或初始化的任务
内部私有函数:
在一个函数中定义另一个函数
function outer(param) { function inner(theinput) { return theinput * 2; } return 'The result is ' + inner(param);}
改用函数标识法:
var outer = function (param) { var inner = function (theinput) { return theinput * 2; }; return 'The result is ' + inner(param);};
结果:
outer(2); --The result is 4outer(8); --The result is 16
inner(2); --inner is not defined
使用私有函数的好处:
1.有助于我们确保全局名字空间的纯净性
2.确保私有性——只选择一些必要的函数暴露给“外部世界”,而保留属于自己的函数,不为该应用程序的其他部分所用
返回函数的函数:
function a() { alert('A'); return function () { alert('B'); };}var newFync = a();newFync();让返回的函数立即执行:a()();
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~