js中 作用域链 和 闭包 怎么理解

jonneyQ 发布于 2013/12/13 15:50
阅读 697
收藏 1

最近再看javascript的书,讲到作用域链的概念不甚理解,比如一个函数 


function compare(value1,value2){
   if(value1<vlaue2){
       return -1;
     }else{
        return 1
     }
}

1、在创建compare()函数的时候,会创建一个预先包含全局变量的作用域链,

这个作用域链被保存在内部的[[Scope]]属性中,当调用这个函数时,会为

函数创建一个执行环境,然后通过复制函数的[[Scope]]属性中的对象构建

执行环境的作用域链。

我想问的是作用域链到底什么,还有那个[[Scope]]属性是什么,保存在哪里,

怎么还保存了函数的作用域链....真的不甚理解,求大神们解答!!!

2、对于另外一个函数

function createCom(propertyName){

  return function(object1,object2){
     var value1 = object1[propertyName];
     var value2 = object2[propertyName];
     if(value1 < value2 ){
       return -1;
     }else{
       return 1;
     }
  }

}
在 函数 createCom 执行完毕之后其活动对象不会被销毁,因为匿名函数的作用域链仍然引用着这个活动对象,这句话怎么理解???


加载中
0
淘淘我的小宝宝
淘淘我的小宝宝
这个问题不是几句话可以说清楚的。如果你有过oo语言经验的话应该好切入理解。比如java的内部类,作用域等。看书的话结合实际例子多写写代码。
0
Arrowing
Arrowing
看看Javascript高级程序设计第三版就OK了
0
开源无憾
开源无憾
scope就是作用域的英文,作用域链就的作用如下:当解释器运行到该函数处时,当前上下文环境,即当前活动对象,调用该函数,调用的同时拥有了一个配套的囊括了所有可使用的变量组成的队列(这种说法是我原创的,可能不准确),也就是所谓的作用域链属性
0
Margo
Margo

我是一个新手 每次看到这就纳闷 value1,value2的值是哪儿来的?继承下来的吗

 

functioncompare(value1,value2){
2    if(value1<vlaue2){
0
ueharaai
ueharaai
我的博客中的《如何用函数表示数》系列 可以作为理解闭包的一个参考,里面的东西都看懂,基本闭包没问题了。
返回顶部
顶部