标签:
3.4 函数也是数据
函数是一种数据类型,
function f() {
return 1;
}
var f = function (){ retrun 1; }
第二种定义方式通常被叫作函数标识记法。
函数这种特殊的数据类型有两个重要的特性:
1.它们所包含的是代码
2.他们是可执行的(或者说是可调用的)
3.4.1 匿名函数
1.函数是本质上与其他的变量并区别,因此他也可以在名字的情况下被使用、
function (a){ return a;}
2.让散落在代码中的那些匿名数据片段不会真的一无食处,我们可以将它们设置成函数。这样我们就有了两种优雅的用法。
一、我们可以将匿名函数作为参数传递给其他的函数,这样,接收方函数就能利用我们所传递的函数来完成某些事情。
二、我们可以定义某个匿名函数来执行某些一次性仍无
3.4.2 回调函数
把函数当成参数传递
function one (){
return 1;
}
function two(){
return 2;
}
function invoke_and_add(a,b){
return a() + b();
}
//TO CALL
invoke_and_add(one,two);
使用匿名函数来替代one() 和two(),以作为目标函数的参数
invoke_and_add(function(){return 1},function(){return 2;});
function a(b){
b();
}
function b(){
console.log("im callback");
}
将函数A传递给函数B,并由B执行A时,A就成了一个回调函数
function a(b){
console.log("im a");
b();
}
//回调函数
function b(){
console.log("IM CALLBACK");
}
A是一个无名函数,我们就称为匿名回调函数
//传递匿名回调函数
a(function(){
console.log("匿名函数");
});
什么时候使用回调函数???
1、他可以让我们在不做命名的情况下传递函数(这意味着可以节省全局变量);
2、我们可以将一个函数调用操作委托另一个函数(这意味着可以节省一些代码编写工作)
3、它们有助于提升性能
// style1、
function multiplyByTwo(a,b,c){
var i,ar = [];
for(var i=0;i<3;i++){
ar[i] = arguments[i]*2;
}
return ar;
}
function addOne(a){
return a+1;
}
console.log(multiplyByTwo(1,2,3));
console.log(addOne(100));
// style2. 我们要实现三个元素在两个函数之间的传递,这需要定义一个用户存储元素的数据
var myArr=[];
myArr = multiplyByTwo(10,20,30);
console.log(myArr);
for(var i=0;i<3;i++){myArr[i] = addOne(myArr[i]);}
console.log(myArr);
// style3. 把两个函数合二为一 对multiplyByTwo 函数做一些改动,使其就是一个回答覅函数,并在每次迭代操作中调用它
//
//
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);
自调函数:
(function(){
alert(‘foo‘);
})();
1.将匿名函数放进
- 语法格式:(匿名函数)
//0.匿名函数
function(){
}
- 立即调用语法格式: (匿名函数)()
//1.自调函数
(function(){
alert(‘foo‘);
})();
- 传递参数语法格式:(匿名函数)(参数)
//2.匿名函数可以传递参数
(
function(name){
console.log("匿名函数可以传递参数="+name);
}
)("demo")
什么时候使用自调函数
1.自调匿名函数的好处不会产生任何变量,
2.缺点是这样的函数是无法重复执行的。
3.匿名自调函数最适合一些一次性或初始化的任务。
3.4.5 内部(私有)函数
function a(param){
function b(theinput){
return theinput*2;
}
return ‘The result is‘ + b(param);
}
使用私有函数的好处主要有以下几点:
1.有助于我们确保全局名字空间的纯净性(这意味着命名冲突的机会很小)
2.私有性————这使我们可以选择只将一些必要的函数暴露给许“外部世界”,并保留属于自己的函数,使他们不为该应用程序的其他部分所用。
3.4.6 返回函数的函数
function a(){
alert(‘a!‘)
return funtion(){
alert("返回回来的函数");
}
}
a()();
好处:
1.这对于要执行某些一次性初始化工作的函数非常有用。
2.
3.5 闭包
3.5.2 词法作用域
function f1(){
var a = 1;
//被执行时
f2();
}
//被定义时
function f2(){
return a;
}
f1();
标签:
原文地址:http://my.oschina.net/u/1403169/blog/380772