java调用js匿名函数参数,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 4

outer(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()();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值