JavaScript学习随笔--函数作用域
2016-12-03 12:20
351 查看
JavaScript中函数的作用域
首先我们需要弄清楚什么是函数作用域,看下面的代码:var vg= "vg"; function f1(){ var vf1= "vf1"; return { f2:function(){ var vf2= "vf2"; console.log(vg+vf1+vf2); } }; } var o = f1(); o.f2();//print vgvf1vf2
所谓函数作用域就是函数可以访问的变量集合(不包括this和arguments),在这些可访问变量中又可以分成3类:1)全局变量,定义在全局域中(不在任何函数体中定义的变量都是全局变量)所有函数都可以访问,如本例中的vg。2)局部变量,定义在函数内只有函数本身可以访问的变量,如本例中vf1是f1的局部变量,vf2是f2的局部变量。3)闭包变量,函数的外部函数的所有局部变量,如本例中的vf1就是f2函数的闭包变量。闭包变量可以被所有的嵌套函数访问。函数每次调用时都会生成新的局部变量,但是闭包变量只在外部函数调用时生成一次。
接下来我将演示如何在chrome中debug这段代码,以便于我们能更直观更深入的了解JavaScript中的函数作用域的概念。步骤如下:
1. 新建一个html文件test.html,内容如下:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> var vg= "vg"; function f1(){ var vf1= "vf1"; return { f2:function(){ var vf2= "vf2"; console.log(vg+vf1+vf2); } }; } var o = f1(); o.f2(); </script> </head> <body> </body> </html>
用chrome打开test.html,按shift+ctrl+i调出开发者工具框,在html的第13行打上断点。如图:
3.刷新浏览器,那么chrome将会停在13行,这时我们可以看到函数f2的执行期的所有信息。如下图:
4.在debug窗口的右边栏,我们可以看到函数f2的Call Stack,Scope,Call Stack就是函数的执行顺序,Scope就是函数的作用域,图中我们可以清楚的看到f2的scope中包含3个对象,分别是Local,Closure,Global。 Local就是局部变量,Closure就是闭包变量,Global就是全局变量。
相关文章推荐
- JavaScript 学习笔记 五 函数作用域
- JavaScript学习记录day6-函数变量作用域、解构赋值与方法
- JavaScript 学习笔记 五 函数作用域
- JavaScript学习记录day6-函数变量作用域、解构赋值与方法
- JavaScript学习-函数
- JavaScript学习-动态函数
- javascript学习随笔(使用window和frame)的技巧
- [翻译]javascript学习笔记 (一)-函数基础
- javascript学习随笔(编写浏览器脚本 Navigator Scripting )
- IE和FireFox中JavaScript的函数名的作用域的异同
- JavaScript学习笔记 6-循环、数组和函数 Loops , Arrays and Function
- javascript学习随笔(使用window 和 frame )
- 【Javascript】javascript学习 十二 JavaScript 函数
- javascript 学习之 函数 - 参数
- javascript 学习之 函数-数据函数
- JavaScript学习-内部函数
- javascript学习随笔(编写浏览器脚本 Navigator Scripting )
- javascript学习随笔(Navigator 对象)
- javascript中变量没有块级作用域---函数内申明的变量在整个函数中都有效!
- javascript 学习之函数-定义和调用函数