作用域和闭包

变量提升(预解析)

javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,有意思的是,这意味着变量在声明之前甚至已经可用。JavaScript的这个特性被非正式地称为声明提前,即JavaScript函数里声明的所有变量(但不涉及赋值)都被"提前"至函数体的顶部。
eg:将函数内的变量声明“提前”至函数顶部,同时变量初始化留在原来的位置:

    var a = 10
    function fn(){
      console.log(a)   //undefined
      a =20
      console.log(a)   //20
    }

闭包

函数可以通过作用域链相互关联起来,函数体内部的变量可以保存在函数作用域内。
为什么要使用B包?
1.因为B包可以访问到函数内部的变量并且会将这些变量的值一直保存在内存中。
2.因为B包引用函数不会被清除,可能会造成内存泄漏的问题,贴别是IE
B包的特性?
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾机制回收

    function fn(){
         var a = 0
         function fn1(){
             a++
             console.log(a) 
         }
         fn1()
         fn1()
    }
   fn()

你可能感兴趣的:(作用域和闭包)