数据类型

undefined

表示对象属性不存在或变量未赋值的特殊值。

不能通过变量值与undefined的比较来确定一个变量是否存在。如果需要确定是否声明,可以使用typeof。

if(typeof(x)==“undefined”)\

null与undefined不同,但是使用 == 比较两者,结果却是真。

常用函数

isNAN()

检测某个人值是否是NaN

## isFinite()
用于检测一个表达式的值是否为无穷大

encodeURI()

返回对一个URI字符串的编码后的结果

  1. 对ASCII中的字母和数字不编码。
  2. “. ! ’ * ()” 和URI中特殊的含义的ASCII标点符号也不会转义,如“; ? : + - &”等、。
  3. 其他字符转换成UTF-8编码。其中 ASCII由一个 %xx 转义字符替换,在\u0080到\u07ff之间的编码的由两个转义序列替换,其他的Unicode字符由三个转义序列替换。

decodeURI()

对已经进行编码的URI进行逆变换。

js闭包

为什么使用闭包

减少全局变量的使用,增加代码维护度、系统安全性。

原理

  • 在函数外部访问函数内部局部变量。

外部函数 f1(){
var 变量 a;
定义: 内部函数 f2(){
访问变量 a;

return f2;
}

//外部使用f2();
引用变量 var f = f1();
f();

  1. 内部函数f2可以访问外部函数f1局部变量a
  2. 外部函数f1局部变量a的生命周期也会因为内部函数f2使用该变量而得到延长
  3. 直到内部函数f2执行完且 ,指向内部函数的引用 f不再使用, 此时要被访问的变量a不再使用,也就是该外部函数的变量 a生命周期结束的时候。

代码:

function set(val) {
var f =closure(val);
f();
f = null;//用完置空内存回收
}

//js函数闭包 定义变量
// 函数内部函数可以访问外部函数变量 wait flag
// 外部函数变量的生命周期也会因为 内部函数使用该变量而得到延长
// 直到内部函数执行完且 指向内部函数 的变量 f不再使用, 此时不再使用外部变量,也就是 该外部变量 wait flag 生命周期结束


function closure(val) {


var wait = 60;
var flag = true;



/*
pointer-events:

值为auto的时候:效果和没有定义pointer-events属性相同;鼠标不会穿透当前层。在SVG中,该值和visiblePainted的效果相同。

值为none的时候:元素不在是鼠标事件的目标,鼠标不在监听当前层而去监听下面的层中的元素。但是如果他的子元素设置了

pointer-events为其他值,如auto,鼠标还是会监听这个子元素的。


*/

return function timer() {

if (flag){ reload();flag=false;}

if (wait === 0) {
val.removeAttribute("disabled");
val.style.pointerEvents = "auto";
val.innerText = "获取验证码";
return;

} else {
val.setAttribute("disabled", true);
val.style.pointerEvents = "none";
val.innerText = "重新发送(" + wait + ")";
wait--;
setTimeout(function () {
timer();
},
1000)
}
}

}