标签:
一、定义函数的方式
1.函数声明:function abc(){}
2.函数表达式:var abc = function(){}
二、递归
1.通过自身的名字调用:但函数名赋值给其他函数时失效
function factorial(num){ if (num <= 1){ return 1; } else { return num * factorial(num-1); } }
2.通过arguments.callee调用:在严格模式下不能访问arguments.callee
function factorial(num){ if (num <= 1){ return 1; } else { return num * arguments.callee(num-1); } }
3.创建一个f()函数
var factorial = (function f(num) { if (num <= 1){ return 1; } else { return num * f(num-1); } })
三、闭包
1.活动对象与变量对象
以function compare(value1, value2){}为例
全局变量对象为compare;活动对象为arguments、value1、value2;此时的活动对象也叫局部变量对象。
2.闭包的理解:
function a(value) { return function(value1, value2) { return 1; } } var abc = a();
abc为a函数的中的匿名函数,存在于全局变量中,则a的活动对象不会被删除,abc=null则活动对象才会被删除。
3.闭包与变量
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(){ return i; }; } return result; } var a = createFunctions(); console.log(a[1]());
a = [function(){return i;}, function(){return i;},function(){return i;}...];
全局变量中引用createFunctions中的匿名函数,所以他的活动对象一直存在,且i=10。
4.关于this对象
标签:
原文地址:http://www.cnblogs.com/pcd12321/p/5585852.html