标签:
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