冒泡排序
// 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);