邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

关于js的闭包
关于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按钮来提交表单
<script language="javascript">
    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获取图片的宽度和高度
1.onload
// 图片地址 后面加时间戳是为了避免缓存
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);
};


优惠券
最新微语