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的私有变量。
注意,外层函数每次运行,都会生成一个新的闭包,而这个闭包又会保留外层函数的内部变量,所以内存消耗很大。因此不能滥用闭包,否则会造成网页的性能问题。

练习
< body>
< !–< div>i love you< /div >
< button onclick=“dat()”>点击–>
< 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 (cnull || !isNaN© ){
// 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;
// }

// //闭包
// function f1(){
// var n=99;
// return function f2(){
// console.log(n);
// }
// f2();
// }
// f1();

	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);

猜你喜欢

转载自blog.csdn.net/Hjboke/article/details/82019723