




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
javascript闭包的介绍理解和讲解实例 javascript闭包的介绍理解和讲解实例顺便提示一下:词法作用域:变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域。with和eval除外,所以只能说JS的作用域机制非常接近词法作用域(Lexicalscope)。下面是一个简单的使用全局变量的闭包实例:复制代码代码如下:varsWord="Hello,Welcometoweb前端开发工程师的博客,请多多指教。"functiondisWord(){alert(sWord);}disWord();解析:脚本载入到内存的时候,disWord并没有计算sWord的值,而是函数disWord调用的时候执行了sWord的计算。下面是函数中定义另一个函数的.闭包实例:复制代码代码如下:variNum=10;functionadd(num1,num2){functiondoAdd(){returnnum1+num2+iNum;}returndoAdd();}解析:内部函数doAdd是个闭包,它将获取传入参数num1,num2和全局变量iNum的值,doAdd不接受参数,add最后一步调用doAdd,请两个参数和全局变量求和返回,可以看得出doAdd使用的值是在执行环境中获得的。下面是在网上找的几个例子,理解词法作用域和闭包复制代码代码如下:、案例一/*全局(window)域下的一段代码*/functiona(i){vari;alert(i);};a(10);疑问:上面的代码会输出什么呢?答案:10。具体执行过程a函数有一个形参i,调用a函数时传入实参10,形参i=10接着定义一个同名的局部变量i,未赋值alert输出10思考:局部变量i和形参i是同一个存储空间吗?、案例二复制代码代码如下:1/*全局(window)域下的一段代码*/2functiona(i){3alert(i);4alert(arguments[0]);//arguments[0]应该就是形参i5vari=2;6alert(i);7alert(arguments[0]);8};9a(10);疑问:上面的代码又会输出什么呢?答案:10,10,2,2具体执行过程函数有一个形参i,调用a函数时传入实参10,形参i=10第一个alert把形参i的值10输出第二个alert把arguments[0]输出,应该也是i接着定义个局部变量i并赋值为2,这时候局部变量i=2第三个alert就把局部变量i的值2输出第四个alert再次把argumentsa[0]输出思考:这里能说明局部变量i和形参i的值相同吗?、案例三复制代码代码如下:/*全局(window)域下的一段代码*/functiona(i){vari=i;alert(i);};a(10)疑问:上面的代码又又会输出什么呢?答案:10具体执行过程第一句声明一个与形参i同名的局部变量i,根据结果我们知道,后一个i是指向了形参i,所以这里就等于把形参i的值10赋了局部变量i第二个alert当然就输出10思考:结合案列二,这里基本能说明局部变量i和形参i指向了同一个存储地址!、案例四复制代码代码如下:/*全局(window)域下的一段代码*/vari=10;functiona(){alert(i);vari=2;alert(i);};a();疑问:上面的代码又会输出什么呢?答案:undefined,2具体执行过程第一个alert输出undefined第二个alert输出2思考:到底怎么回事儿?看到上面的几个例子,你可能会想到底是怎么执行的呢?执行的细节又是怎么样的呢?JS引擎的工作方式是怎样的呢?解析过程、执行顺序编译型语言,编译步骤分为:词法分析、语法分析、语义检查、代码优化和字节生成。解释型语言,通过词法分析和语法分析得到语法分析树后,就可以开始解释执行了。这里是一个简单原始的关于解析过程的原理,仅作为参考,详细的解析过程(各种JS引擎还有不同)还需要更深一步的研究javascript的执行过程,如果一个文档流中包含多个script代码段(用script标签分隔的js代码或引入的js文件),它们的运行顺序是:步骤1.读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)步骤2.做词法分析和语法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤5步骤3.对【var】变量和【function】定义做“预解析“(永远不会报错的,因为只解析正确的声明)步骤4.执行代码段,有错则报错(比如变量未定义)步骤5.如果还有下一个代码段,则读入下一个代码段,重复步骤2步骤6.结束、特殊说明全局域(window)域下所有JS代码可

玄静****写意
实名认证
内容提供者


最近下载
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种胃肠道超声检查助显剂及其制备方法.pdf
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf