主页 > 专题教程 > javascript > js基础 >
来源:自学PHP网 时间:2018-02-08 10:24 作者: 阅读:次
[导读] 本文介绍JavaScript中的匿名函数,以及函数的作用域链,并通过图解的方式详细分析函数的作用域链的内存模型。...
在理解JavaScript的闭包之前,我们有必要了解一下JavaScript中函数的执行顺序。我们前面说过,定义函数有多种方式,其中最常用的是下面的两种方式。 /* 定义函数的第一种方式 */ function fn1(){ alert("fn1"); } /* 定义函数的第二种方式 */ var fn2 = function(){ alert("fn2"); } 对于第一种定义函数的方式,我们称为函数声明。以这种方式声明的函数会在函数执行之前被加载到内存中,所以无论是在函数定义之前,还是在函数定义之后调用这个函数都不会报错。 对于第二种定义函数的方式,我们称为函数表达式。以这种方式定义的函数会先在内存中创建一块区域,之后通过一个 在JavaScript中,当进行函数的调用时,会创建一个执行环境,并为每一个函数增加一个属性 每一个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。在函数执行完毕后,栈将它的环境弹出,把控制权交回给原来的执行环境。 作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。在作用域链的最前端始终是当前执行的代码所在的环境的变量对象。作用域链的下一个变量对象来自于包含环境,再下一个变量对象又来自于下一个包含环境,一直延续到全局执行环境。全局执行环境的变量对象始终是作用域链的最后一个对象。 上面的这几段话是什么意思呢?我们还是通过具体的例子和内存模型分析来讲解。先看下面的例子,下面的这个例子完成的功能是简单的交换 // 定义一个颜色属性 var color = "red"; // 定义显示颜色的方法 var showColor = function(){ console.info(this.color); } /* 定义一个交换颜色的函数 */ function changeColor(){ var anotherColor = "blue"; function swapColor(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; } swapColor(); } // 调用交换颜色的函数来改变颜色 changeColor(); // 调用showColor()方法 showColor(); 我们来看上面的一段代码,代码中首先定义了一个颜色变量 再接下来,我们开始执行 图中蓝色部分是
接下来开始执行 同样, 接着, 第二句代码是 第三句代码是 最后, 在 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com