读书人

深入懂得javascript的一些特性(静态作

发布时间: 2013-10-24 18:27:21 作者: rapoo

深入理解javascript的一些特性(静态作用域,this指针,闭包)

差不多都是这两天看书的一些总结,在这里记下来,算是个梳理。不是详细的讲解,主要记录要点。

关于javascript的静态作用域:

1. javascript的作用域完全由函数来决定,化括号不是独立的作用域。

2. javascript语言的特殊之处在于函数内部可以读取函数外部的变量。而函数外部无法读取函数内部变量。

子对象会一级一级向上寻找所有父对象变量。父对象的所有变量对子对象可见,反之不成立。

3. 静态作用域的含义是函数作用域的嵌套关系由定义时决定而不是调用时决定。又成为词法作用域,其作用域嵌套关系

在语法分析时决定,而不是运行时决定。如:

var func = function(){var num = 123;var count = 1;var get = function(){count ++;num --;console.log(num);return count;};return get;};var counter = func();console.log(counter());console.log(counter());
运行以上代码得到结果:

122
2
121
3
当一个函数被调用并返回一个内部定义的函数的时候,就产生了闭包。闭包包括被返回的函数以及这个函数的定义环境。

2. 闭包的作用:

闭包主要有两大作用,第一个是实现回调函数嵌套,第二个是隐藏对象细节。

关于第一个作用在之后的文章会做进一步剖析。因为还需要探究一下回调函数的实现机理。

对于隐藏对象细节,可以这么理解:

因为函数内部变量对于外部是不可见的,我们可以通过闭包的形式,创建一个函数对象,函数内部数据外部无法直接访问,只能通过内部定义的访问器

函数来操作返回内部数据。

读书人网 >JavaScript

热点推荐