闭包
在JavaScript中,它是一个初学者闻之色变的概念,但它又是一个我们进阶JavaScript中必须要克服的一个概念。其实,话说回来,也没有辣么难。它和两个基本概念有关系。首先,咱们来看看JavaScript重的作用域和生命周期。
作用域和闭包
作用域:指变量的作用范围
在JavaScript中,我们通常使用var 来声明和定义一个变量。在一个函数中,如果咱们不使用var 声明变量,那么这个变量就会成为全局变量。非常容易产生命名冲突,而且内存也会被大量浪费。反过来,在函数中,使用var 定义的变量将成为局部变量。也就是说,只能在这个函数中被访问。外部无法直接访问。
通常情况,我们在JavaScript中使用函数来创建函数作用域,而且有的时候我们会一个函数嵌套另一个函数,这样的嵌套函数会形成一层层的作用域,当我们在最内部的一个函数中使用某个变量的时候,它会从最里层的函数作用域,一直往上层去搜索该变量。代码示意如下:
/**
* Created by bill on 6/26/2017.
*/
var a = 1;
var func1 = function(){
var b = 2;
var func2 = function () {
var c = 3;
console.log(a);//将输出1
console.log(b);//将输出2
}
func2();
console.log(c); // 此段代码将会输出C is undefined,不能正常运行
}
func1();