第7章自我小结

js高级程序设计

第7章内容总结

1 函数表达式的特征

2 使用函数实现递归

3 使用闭包定义私有变量

声明提前
1 .函数声明和函数表达式存在区别:

     abc();  //Uncaught TypeError: abc is not a function
     var abc = function(){
            console.log("hello world");
     }  
	abc();    //hello world
	function abc(){
		console.log("hello world");
	}

2.递归

例:

	    function factorial(num) {
				if(num <= 1){
					return 1;
				}	else {
					return num*factorial(num-1);
				}
		}

arguments.callee是指向正在执行函数的指针,可以减少耦合度。防止出现下列情况:

      var    abc =  factorial;
      abc();   //报错

3.闭包

图1
(1)全局初始化,由 js 引擎构建一个ecs执行环境栈,作用维持执行顺序,再创建ec执行环境Object代表全局对象,(由于不能直接访问Object,通过window对象指向Object访问。)

outer代码段存在执行环境中。
图2
(2)开始执行outer函数,outer() 被push入ECS,同时创建出AO对象,它自身的AO对象排在作用域链的最顶端,parent属性指向了它的上一级window.(方便js引擎查找变量属性的位置)()图3
(3)outer函数内部返回匿名函数,函数创建,同时scope指向当前的AO。
scope总是指向定义函数时所在的环境。图4
(5)
在这里插入图片描述
(6)最后,i加到了outer的ao上,由于AO对象的限制作用没有办法回收而被保留了下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值