1.基本数据类型:5个 Number String Boolean null undefined
2.引用数据类型: 2个 object function
3.作用域:简单的说作用域就是变量的可访问范围,它控制着内部变量的可见性和生命周期
全局作用域:浏览器加载的时候开辟的栈内存空间
私有作用域:全局作用域下 的 函数运行时开辟的栈内存空间就是私有作用域(闭包);
闭包:官方解释是 一个拥有多个变量和绑定了这个变量的环境的表达式(通常是一个函数),变量也是该表达式的一部分
通俗的讲所有的function都是一个闭包。
嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的'闭包';
闭包的缺点:会制造出不被销毁的栈内存
闭包的优点:1、保护内部变量不被外界污染,内部变量也不污染外部变量
2、可以通过返回值,返回内部变量的值
function fn(){ var num = 1; // 当退出函数fn后,局部变量num不会销毁而是在栈内存 return fn2(){// 一直存活 num++; // 形成了一个严格意义上的闭包 alert(num); } } var closure = fn();
作用域链:
4.JS中的内存空间: 2种 栈内存 堆内存
栈内存:提供JS代码的执行环境;存储基本数据类型的值;
->全局作用域或者私有作用域 其实都是栈内存
堆内存:存储引用数据类型的值(属性名和属性值,函数是把函数体中的代码当做字符串存储进去);
5.变量: 临时存储的值;占位符 js是赋值的时候才知道 变量类型;
全局变量:window下声明的变量(包括隐式声明的变量)
私有变量:私有作用域下声明的变量
变量的生命周期: 变量的生命周期伴随所在作用域的结束而销毁
对于全局变量的生命周期是永久的,除非我们主动去销毁它
对于局部变量的生命周期,随着函数调用结束而被销毁