js函数 函数自调用 返回函数的函数 (闭包)

转 http://blog.sina.com.cn/s/blog_8f9d58d50102w331.html

什么是函数:
①函数是重复计算使之简化,修改常量方便。
②函数是数学中的抽象概念,我们看到一个符号就知道其中的计算,

100

n

n=1
以上这个符号代表1到100的相加,看到它理解成加和,而不是很简单的加法运算;我们可以省了复杂的计算过程,直接思考高层次的逻辑。
函数是最基本的一种代码抽象方式。
首先需要清楚的了解一点: 所有函数都是对象
以下函数中 obj()函数是一个函数对象,而函数名 obj可以视为指向该函数的变量
比如我们定义一个函数可以这样写:
function obj(a){ 
console.log(a)
};
还可以这样写:
var obj= function(a){
console.log(a)
}

函数内部的语句在执行时,一旦执行到 return时,函数执行完毕,并将结果返回。如果没有return语句,函数执行完毕会返回结果,只是结果是undefined。

小心你的return语句
js语言有一个在行末自动添加分号机制,
functionobj(a){ 
return   
(a+"name")
};
functionobj(a){ 
return    (a+"name")
};
返回的结果是不一样的。

函数自调用:
所谓的函数自调用,就是在定义函数的时候直接调用。
比如:
var result =function (x){return x + 1;}(3);
这段代码的本质是:

var plusOne =function (x){
return x + 1;
};
var result = plusOne(3);

这样写就清楚了,我们先定义一个函数plusOne ,然后调用它,并提供实参3.
而上面的自调用的写法就是把这两件事放在一起完成了。
通过function (x){return x +1;}这一段代码,相当于写了一个函数字面量(字面量详见面向对象的三种创建方式),
而后面紧接着的(3)就是给这个函数字面量一个参数来调用它。换句话说,所有函数
类对象,不论是一个现场定义的匿名函数,还是一个之前定义的有名字的函数,他们不加
括号的时候都代表了这个函数对象本身,而加括号代表了调用这个函数,也就是这个函数
的return对象。

返回函数的函数:
刚才的例子:
var plusOne =function (x){
return x + 1;
};
var result = plusOne(3);
这里的函数plusOne返回参数+1以后的值。
实际上一个函数是可以返回任何对象的,我们可以给plusOne再套一层:
js函数 <wbr>函数自调用 <wbr>返回函数的函数
plusOne是第一个真正被调用的函数,通过plusOne加括号,我们可以得到了
plusOne函数return的对象,也就是realFunction函数,再通过plusOne()(3)
我们得到了realFunction这个函数传了参数3以后的return值,也就是4。(注意
对于最后一行来说,realFunction这个名字已经不存在了);
我们可以把x放在外面:
js函数 <wbr>函数自调用 <wbr>返回函数的函数
这里我们相当于先把3告诉plusOne函数,然后由realFunction负责把plusOne活得的参数
加一,并返回。所以我们需要在第一个括号里面传3,第二个括号为空。
利用上面所说的返回函数的函数。可以做一些有趣的事情。
js函数 <wbr>函数自调用 <wbr>返回函数的函数
把一个动作分成两步完成还可以实现一定的私密性。想象一下,我们需要两个密码打开一把锁,但是我们又不希望其中任何一个人知道另一个人的密码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值