定义函数的常见方法:闭包
函数声明的一个特征:函数声明提高;函数
函数声明如:this
function fName(){ }
函数表达式也是常见的建立函数的方法:spa
var fName = function ( ) { }
函数表达式的另外一种声明的方法:
(function f(){}); //()是一组分组操做符,它的内部只能包含表达式
注意:函数表达式与其余表达式同样,在使用前必定要进行赋值操做。在把函数当作值来使用的状况下,均可以使用匿名函数,指针
可是这不是匿名函数的惟一用途。code
建立函数也能够再另外一个函数中返回一个函数对象
function create ( ){ .......... return function( ){ ........ }; }
函数递归:一个函数经过调用自身的状况blog
funtion fName (){ if(num <= 1){ return 1; }else{ return num * arguments.callee( num -1 );//arguments.callee是一个指向当前函数的一个指针 } }
闭包:是指有权访问另外一个函数做用域中的变量的函数,闭包会携带包含它的函数的做用域变量对象。递归
一个闭包的例子:作用域
1 var name = " 闭包"; 2 3 var object = { 4 5 name : "JS", 6 7 getName : function(){ 8 9 //这是一个闭包 10 return function(){ 11 return this.name; 12 }; 13 14 } 15 16 };
由上面的例子谈下关于闭包的this对象,闭包的this对象通常状况下指向的是window;
1 var name = " 闭包"; 2 3 var object = { 4 5 name : "JS", 6 7 getName : function(){ 8 9 //这是一个闭包 10 return function(){ 11 return this.name; 12 }; 13 14 } 15 16 }; 17 18 console.log(object.getName()()); //输出闭包 this指向 window
1 var name = " 闭包"; 2 3 var object = { 4 5 name : "JS", 6 7 getName : function(){ 8 9 //把包含函数的this引用复制给变量,在闭包中调用,改变闭包的this引用 10 11 var _this = this; 12 13 //这是一个闭包 14 return function(){ 15 return _this.name; 16 }; 17 18 } 19 20 }; 21 22 console.log(object.getName()()); //输出JS this指向 object