ao

JavaScript闭包

China☆狼群 提交于 2019-11-26 16:47:06
闭包:定义在一个函数内部的函数被引用到了外部 本质上,闭包是将函数内部和外部连接起来的桥梁。 通常,函数的作用域和它的所有变量都会在函数执行结束后被销毁,但是,在创建了一个闭包以后,这个函数的作用域会一直保存到闭包不存在为止。 这样说可能不理解,让我们看一个经典闭包案例 function test(){ var arr[]; for (var i = 0 ;i < 10; i++) {arr[i] = function () {document.write(i+" ");} } return arr; } var myArr = test(); for (var j = 0;j < 10;j++) { myArr[j](); } ​ 按照常理应该输出0~9吧,实则不然,居然会输出10个10! 因为函数赋值给数组,和外部函数test形成了闭包。 大家可能会有疑问,为什么不是一一对应的呢?i = 0 时,arr[0] =function() {document.write(0+" ")};这个时候应该打印0啊。 这样想是不对的,我来粗略讲解一下这个过程。 1.首先我们从函数调用执行时开始讲起,因为test函数定义过程所需要用的GO我们用不到。 2.在代码块下面,我们使用var myArr =test();调用函数test,在函数执行的前一刻我们进行预编译,函数test会生成一个AO