您的位置:首页 > Web前端 > JavaScript

javascript作用域

2013-11-21 20:10 232 查看
几乎所有语言都有作用域的概念,而且相当重要,是设计一门语言时不可回避的问题,

大体来说,作用域一般可以分为两种,即静态作用域和动态作用域,一般情况下,

多采用静态作用顾规则,又叫词法作用域,是指作用域在词法分析阶段就可以确定,

而动态作用域则采用较少,因为其实现较为复杂。对于javascript来说,其可以成为

静态作用域,虽然不完全是。所谓的作用域,可以理解为变量的可访问范围,也即在

代码的哪个区域可以访问。其实这是一种比较表面的说法,其实质是一个当一个变量

被分配了存储空间后,哪些代码可访问该空间。一般情况下,比如c语言,拥有函数

作用域和块级作用域,也就是说函数内部和块内的变量不可以被外界访问。但是在javascript

中没有块级作用域,其唯一能形成局部作用域的是函数,也就是说在函数内部的变量不

能被外界访问。这本身并没有什么难以理解的,但是javascript允许函数进行嵌套定义,

也就是说在函数内部还可以定义函数,这样就出现了嵌套的作用域。内部函数可以访问

外部函数的变量。如何实现这种作用域呢?javascript是用作用域链的方式实现静态作用域

和函数作用域的。当一个函数被定义或者是被创建的时候,其可访问的变量范围已经被确定

下来,ecmascript规范中有一个内部属性[[scope]],该属性就包含了所有他可以访问的变量

。当函数执行的时候,其内部的变量包括参数会被组织成一个叫活动对象的内部实现,把

该活动对象放置于[[scope]]的顶端,就形成了该函数所有课访问变量的集合。可以看出,

[[scope]]也是一个由很多变量对象组成的,这可以看做事一个链,访问时从链顶到链底查询

变量,这就是作用域链的实现方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: