第7章自我小结

js高级程序设计

第7章内容总结

1 函数表达式的特征

2 使用函数实现递归

3 使用闭包定义私有变量

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

     abc();  //Uncaught TypeError: abc is not a functionvar abc = function(){console.log("hello world");}  
	abc();    //hello worldfunction 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对象的限制作用没有办法回收而被保留了下来。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部