日期:2014-05-16  浏览次数:20361 次

JavaScript中的变量声明与作用域
  1. 使用关键字var 声明变量,例如:
    var a = "hello world";
  2. 也可以同时声明多个变量:
    var a, b, c;
  3. 声明,但未指定初始值的变量,初始值为undefined
  4. JavaScript的变量可以指向任何类型
  5. 由var声明的变量是永久的,不能用delete删除
  6. 可以使用var重复多次的声明同一变量,其中的初始化被认为是赋值操作
  7. 如果未以var关键字来声明变量,则会隐式的声明一个变量;一个隐式声明的变量是全局的
  8. JavaScript没有块作用域,因此函数中声明的所有变量都有同样的作用域,例如:
    function test(o){
           var i = 0;
           if( typeof o == "object"){
                 var j = 0;
                 for(var k = 0;k<10;k++){
                          document.write(k);
                 }
                 document.write(k);
            }
            document.write(j);
    }
  9. JavaScript有自动垃圾回收系统,不用考虑对象的释放。?
  10. JavaScript存在一个全局对象。当JavaScript解释器开始运行时,它就会创建一个全局对象。所有的全局变量都可以认为是这个对象的属性。
  11. 局部变量也是一个对象的属性,称之为调用对象。
  12. JavaScript每次执行一个函数时都会创建一个执行环境。JavaScript可以同时有多个执行环境,例如每个独立的浏览窗口或同一个窗口的多个帧(Frame)。这时全局对象就不完全是全局了的,它是属性每个独立的执行环境中的全局变量。但是他们之间可以通过,例如 parent.frames[1] 来引用另一帧,然后引用其中声明的变量,例如:
    parent.frames[1].x

作用域链

?

每个JavaScript执行环境都有一个与它关联的作用域链。这个作用域链是一个对象列表或对象链。当JavaScript代码需要查询某个变量(x)的值时,它就开始查找链上的每个对象,看看它是否有这个变量;否则就继续往上,直到查找到这个变量:

?

?