作用域与闭包

全局作用域只有一个,每个函数又都有作用域(环境)。

函数每次调用都会创建一个新的作用域。


let title = "dsdf";

        function a(){

            console.log(title)

        }

        a();a();

使用let或const可以把变量声明在作用域里面,

1.使用let或const声明的变量可以被当前环境使用,或者子作用域使用,定义的数据不能被父级作用域使用。

2.没用调用函数不会开辟内存空间

3.作用域链只向上查找,找到全局window即终止,应该尽量不要在全局作用域中添加变量。

4.函数被执行后其环境变量将从内存中删除。下面函数在每次执行后将删除函数内部的total变量。

function count() {

  let total = 0;

}

count();

5.如果子函数被使用时父级环境将被保留

function hd() {

  let n = 1;

  return function() {

    let b = 1;

    return function() {

      console.log(++n);

      console.log(++b);

    };

  };

}

let a = hd()();

a(); //2,2

a(); //3,3

6.构造函数也是很好的环境例子,子函数被外部使用父级环境将被保留

function User() {

  let a = 1;

  this.show = function() {

    console.log(a++);

  };

}

let a = new User();

a.show(); //1

a.show(); //2

let b = new User();

b.show(); //1

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