js基础练习总结

冒泡排序

//		var arr=[11,25,6,88,9,12,20];
//		for(var i=0;i=arr.length-1;i++){		//一次确定最大值到最小值
//			for(var j=0;j=arr.length-i-1;j++){	//反复实现数组交换
//				if(arr[j]>arr[j+1]){			//比之后交换
//					var ar=arr[j];
//					arr[j]=arr[j+1];
//					arr[j+1]=ar;
//				}
//			}
//		}
//		console.log(arr);


	//Number()/parseInt()区别			Number 运行加快,便捷
	console.log(Number("18"));		//字符串类型的数字
	console.log(parseInt("18")),parseFloat("18e3");	//18的三次方
	//parseInt 将字符串转为整数	进制转换,去掉单位	parseFloat 将一个字符串转为浮点数
	//String / toString 区别
	//String()可以把任意类型转换字符串 null undefined
	//toString()除了null undefined 都可以转换字符串类型
	var num=18;
	console.log(String(num),num.toString());	//一个里面一个外面取值
	//false 的几种值	false	null	undefined	""即空字符串		0		NaN

闭包

function f1() {
  var n = 999;
  function f2() {
  console.log(n); // 999
  }
}

上面代码中,函数f2就在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的

function f1() {
  var n = 999;
  function f2() {
    console.log(n);
  }
  return f2;
}

var result = f1();
result(); // 999

上面代码中,函数f1的返回值就是函数f2,由于f2可以读取f1的内部变量,所以就可以在外部获得f1的内部变量了。
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。请看下面的例子,闭包使得内部变量记住上一次调用时的运算结果。

function createIncrementor(start) {
  return function () {
    return start++;
  };
}

var inc = createIncrementor(5);

inc() // 5
inc() // 6
inc() // 7

上面代码中,start是函数createIncrementor的内部变量。通过闭包,start的状态被保留了,每一次调用都是在上一次调用的基础上进行计算。从中可以看到,闭包inc使得函数createIncrementor的内部环境,一直存在。所以,闭包可以看作是函数内部作用域的一个接口。
闭包的另一个用处,是封装对象的私有属性和私有方法。

function Person(name) {
  var _age;
  function setAge(n) {
    _age = n;
  }
  function getAge() {
    return _age;
  }

  return {
    name: name,
    getAge: getAge,
    setAge: setAge
  };
}
var p1 = Person('张三');
p1.setAge(25);
p1.getAge() // 25

上面代码中,函数Person的内部变量_age,通过闭包getAge和setAge,变成了返回对象p1的私有变量。
注意,外层函数每次运行,都会生成一个新的闭包,而这个闭包又会保留外层函数的内部变量,所以内存消耗很大。因此不能滥用闭包,否则会造成网页的性能问题。

练习

		< !--< div>i love you< /div >
		< button onclick="dat()">点击</button>-->
		< div onload="countTime()">  
         < span id="_d">00< /span>  
         < span id="_h">00< /span>  
         < span id="_m">00< /span>  
         < span id="_s">00< /span>  
      < /div>  
	<!--<p>
		用户名:<input onblur="c_code()" type="text" id="code">
	</p>
	<p>
		密  码: <input onblur="c_cc()" type="text" id="pwd">
	</p>
	 <p>
	 	<input onclick="" type="submit" value="登录"/>
	 </p>-->
		
//		function c_code(){
//			var code=document.getElementById("code");
//			var c = code.value;
//			if (c==null ||  !isNaN(c) ){
//				alert("请输入字符串");
//			}
//		}
//		
//		function c_cc(){
//		var code=document.getElementById("pwd");
//		var tel = code.value;
//		if(tel.length==11){
//			for(var i=0;i<tel.length;i++){
//				if (Number(tel[i])==false) {
//					alert("请输入数字");
//					break;
//				}
//			}
//		}
//		else{
//			alert("请输入正确的手机号码");
//		}
//	}	

//		function(arr){
//			for(i=1;i>arr.length;i++){
//				var key=arr[i];
//				var j=arr[i-1];
//				while(arr[j]>key){
//					arr[j+1]=arr[j];
//					j--;
//				}arr[j+1]=key;
//			}return arr;
//		}var arr=[11,13,111,54,17,90,60,119];
//		console.log(arr);
		
//		var obj={};
//		obj.property1="property1";
//		obj.method1=function (){
//			return bbb;
//		}
//		console.log(obj.property1);
//		console.log(obj.method1);

//		function dat(){
//			var aaa=document.getElementsByTagName('div')[0];
//			var str=aaa.innerHTML;
//			console.log(str);
//			var arr = str.split(" ");					//按照空格分割字符串,转成数组
//			for(var i=0;i<arr.length;i++){				//遍历数组
//				var h=arr[i].slice(0,1).toUpperCase();  //截取数组元素的首字母 - 转成大写
//				var j=arr[i].slice(1); 					//截取剩余的字母
//				arr[i]=h+j;								//拼接首字母和剩余字母,替换数组中的元素
//			}
//			var a=arr.join(' ');						//把数组转成字符串				
//			aaa.innerHTML=a;
//		}

时间定义

	setInterval(function countTime() {  
        //获取当前时间  
        var date = new Date();  
        var now = date.getTime();  
        //设置截止时间  
        var str="2018/8/24 12:00:00";
        var endDate = new Date(str); 
        var end = endDate.getTime();  
        //时间差 
        var leftTime = end-now; 
        //定义变量 d,h,m,s保存倒计时的时间  
        var d,h,m,s;  
         if (leftTime>=0) {  
            d = Math.floor(leftTime/1000/60/60/24);  
            h = Math.floor(leftTime/1000/60/60%24);  
            m = Math.floor(leftTime/1000/60%60);  
            s = Math.floor(leftTime/1000%60);                     
        }  
         //将倒计时赋值到div中  
        document.getElementById("_d").innerHTML = d+"天";  
        document.getElementById("_h").innerHTML = h+"时";  
        document.getElementById("_m").innerHTML = m+"分";  
        document.getElementById("_s").innerHTML = s+"秒";  
         //递归每秒调用countTime方法,显示动态时间效果  
         
	}
	,1000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值