邢栋博客
邢栋博客,Action博客,记录工作和生活中的点点滴滴
关于js的闭包
闭包定义:指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
简单的理解:指有权访问另一个函数作用域中的变量的函数
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
使用闭包的注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值
var person = function(){
//变量作用域为函数内部,外部无法访问
var name = "default";
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}();
print(person.name);//直接访问,结果为undefined
print(person.getName());
person.setName("abruzzi");
print(person.getName());
js cookie
记录下
<script type="text/javascript">
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值{
var Days = 30; //此 cookie 将被保存 30 天
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)//取cookies函数
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
</script>
js四舍五入并保留两位小数
one:
<script type="text/javascript">
var a=2.1512131231231321;
document.write("原来的值:"+a+"<br>");document.write("两位小数点:"+a.toFixed(2)+"<br>四位小数点"+a.toFixed(4));
</script>
two:
<script type="text/javascript">
function turn(val){
var size = new Number(val);
return size.toFixed(2);
}
</script>
js时间转换函数
把时间转换成时间戳
<script type="text/javascript">
function transdate(Time){
var date=new Date();
date.setFullYear(Time.substring(0,4));
date.setMonth(Time.substring(5,7)-1);
date.setDate(Time.substring(8,10));
date.setHours(Time.substring(11,13));
date.setMinutes(Time.substring(14,16));
date.setSeconds(Time.substring(17,19));
return Date.parse(date)/1000;
}
document.write(transdate('2014-11-11 00:00:00'));
</script>
不使用submit按钮来提交表单
function gosubmit(){
document.myfrom.submit();
}
</script>
<form name="myfrom" method="post" action="post.php">
<input type="text" name="username" />
<span onclick="gosubmit()">提交</span>
</form>
js获取图片的宽度和高度
// 图片地址 后面加时间戳是为了避免缓存
var img_url = 'http://www.xingdong365.com/content/uploadfile/201308/3b3e1376105614.jpg?'+Date.parse(new Date());
// 创建对象
var img = new Image();
// 改变图片的src
img.src = img_url;
// 加载完成执行
img.onload = function(){
// 打印
alert('width:'+img.width+',height:'+img.height);
};
2.通过complete与onload一起混合使用
// 图片地址
var img_url = 'http://www.xingdong365.com/content/uploadfile/201308/3b3e1376105614.jpg';
// 创建对象
var img = new Image();
// 改变图片的src
img.src = img_url;
// 判断是否有缓存
if(img.complete){
// 打印
alert('from:complete : width:'+img.width+',height:'+img.height);
}else{
// 加载完成执行
img.onload = function(){
// 打印
alert('from:onload : width:'+img.width+',height:'+img.height);
};
}
3.通过定时循环检测获取
// 图片地址
var img_url = 'http://www.xingdong365.com/content/uploadfile/201308/3b3e1376105614.jpg?'+Date.parse(new Date());
// 创建对象
var img = new Image();
// 改变图片的src
img.src = img_url;
// 定时执行获取宽高
var check = function(){
document.body.innerHTML += '<div>from:<span style="color:red;">check</span> : width:'+img.width+',height:'+img.height+'</div>';
};
var set = setInterval(check,40);
// 加载完成获取宽高
img.onload = function(){
document.body.innerHTML += '<div>from:<span style="color:blue">onload</span> : width:'+img.width+',height:'+img.height+'</div>';
// 取消定时获取宽高
clearInterval(set);
};