一、JS的数据类型
1.原始数据类型 Undefined数据类型的值只有1个:undefined Null数据类型的值只有1个:null Boolean数据类型的值只有2个:true、false Number的数据类型的值:所有的浮点数和整数 String的数据类型的值:所有的字符串2.引用数据类型 1)Object类型 2)Array类型 3)Function类型
eg. //原始数据类型
var i = 9; var j= i; i =3; console.log(i); // 3 console.log(j); // 9// 引用数据类型
var tempa = [1,2];
var temparray = tempa; tempa[0] =6;console.log(tempa); // [6,2]
console.log(temparray); // [6,2]可以看出两者的区别:
原始数据类型:不同变量会分配不同存储空间,并且存储空间中存储的是该变量的值.赋值操作传递的是变量的值.改变一个变量不会影响另一个变量的值. 引用数据类型:赋值是吧原对象引用传递给另一个引用.对数组而言当一个数组引用赋值给另一个数组引用后,两个引用指向同一个数组,即指向同一块内存空间.二、关于闭包
闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。eg.1. function show(){ var i = 0; var fun = function(){ i++; console.log(i); } return fun; }var tempfun = show();
tempfun();
tempfun(); 输出1,22.(function(i){console.log(i)})(7);
输出7以上代码有两个特点:
1、函数b嵌套在函数a内部;2、函数a返回函数b。这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。未完待续......