一、认识函数
函数就是一个工具,函数是实现一个功能的封装,实现某种功能一串代码块。
第一种
函数语法;
函数声明;
function 函数名(){
函数体(具体要执行的代码);
}
【注意】见名思意, 函数名必须体现其功能。
函数调用;
格式;函数名();
作用;
*使程序变得简洁而清晰
*有利于程序维护
*可以提高程序开发效率
*提高了代码的重要性
例子:
function print(){
for(var i = 0 ; i < 10 ; i++){
document.write("hello,嗨"+"<br/>");
}
}
print();
函数声明后需要调用执行
print()
第二种方法;赋值式
/*var fn = function(){
console.log("赋值方式 声明了一个函数")
}
fn();*/
第三种方法;构造函数方式,只要使用new关键字创建对象的函数就叫构造函数。(一般不用)
//Function()第一个字母是大写的,是构造函数
/这种方式不建议使用。
/*var fn = new Function("console.log('1111')");
fn();*/
二、函数参数的特点;
return 关键字;
有参数有返回值的函数;
格式;
function 函数名( 形参1,形参2,形参3....){
函数体;
return 表达式; ·
}
【注意】return后面写什么的表达式,函数调用的结果就是return后面表达式
[[注意]] 函数运行的时候,如果遇到return关键字,整个函数会终止;
//形参于实参:(了解即可)
1、形参是一个声明并未赋值的变量,只有在实参对应传递的时候才赋值。
2、形参没有实参传递的情况下,这个形参是一个undefined;
3、形参可以多个,多个形参之间用逗号隔开。
4、形参一般来说要与实参一一对应,否则就会出现形参是undefined;
return 的特点
1、必须在函数内使用;
2、结束后面的程序;
3、return 后可以不跟任何值,返回undefined;
4、函数没有设置return ,默认回返undefined;
当一个函数的功能实现需要产生一个结果给函数外部程序使用时
就要使用return;
三、函数的递归;
递归;
满足以下三个特点就是递归;
1.函数自己调用自己
2.一般情况有参数
3.一般情况下有return
【注】递归可以解决循环能做的所有的事情,有一些循环不容易解决的事情,递归也能轻松解决;
【个人觉得】递归,都可以写出来,但是不知道为什么是对的。
*递归调用就是自己内部调用函数本身执行。
*递归的特点:
*循环。
*形成一个完整的递归,有条件退出程序。如果没有退出程序的条 件,递归会形成死递归
个人粗糙笔记,觉得哪个不好的话.[可以留言
。。
四、函数的作用域
例子:
var b = 8;//这里的变量b叫函数box的全局变量
function box(){
var a = 3;//在函数内部用var声明的变量,这种变量把它叫函数box的私有变量,函数的外部不可以访问的,这些私有变量又称函数的局部变量
alert("函数内部访问的b+"+b)
}
box();
alert("函数外部访问的b+"+b);
总结:
* 全局范围不可以访问函数的局部变量;
* 函数的局部可以访问全局变量;
* 全局变量中的区域叫全局作用域;
* 函数的局部区叫局部作用域;
作用域链:函数内部要访问变量,先在自己的局部作用域下访问,如果局部没有,再往上一级作用域找,如果还没有继续往上,直到window,如果还没有,程序报错。
五、函数和变量提升
浏览器js解析,分两步骤
1,预解析:先找程序中所有以var声明的变量,并且将这些变量以声明不赋值的方式提升到当前作用域的最开头,找完var后再找function声明的函数,并且将这些函数全部提升到作用域的最开头。如果var声明的变量与函数同名,程序优先保留函数。
2,逐行执行
例子:
/*alert(a);//function a(){alert(3);}
var a=1;
alert(a);//1
function a(){alert(2);}
alert(a);//1
var a=3;
alert(a);//3
function a(){alert(3);}
alert(a);//3*/
六、函数和事件
事件:浏览器检测到js的一种行为。
作用:可以让html元素有行为,大大提高网页的交互性。
事件的三要素:事件源,事件,事件处理程序
事件和函数的关系:事件依赖于函数实现
//函数:是一个功能实现的封装。
//事件:
//要完成一件事,必需要触发某个动作。
//js要对某些html元素进行操作,控制元素实现某些功能,多情况下需要建立在事件基础上。
//如果让一个元素触发某个事件实现一段功能?
//点击一个按钮弹出“我被点击了”;
//该按钮要存在(元素在js中称为元素对象)
//获取到元素
//js中有一个文档对象document
//通过文档对象,获取页面中以id为box的元素
//var but = document.getElementById("box");//选择器
//添加对应事件(触发的动作);
//console.log(but);
//所有事件前加on onmouseover
//完成事件的功能(函数就是实现一个功能);
//事件有三要素:事件的对象,事件本身,事件处理程序
例子:
but.onclick = function(){
alert("我被点击了");
}
* 鼠标事件
* onclick ;点击效果
* ondblclick;鼠标双击
* onmouseover;鼠标滑过
* onmouseout;鼠标划出
* onmouseenter;鼠标进入
* onmouseleave;鼠标离开
* oncontextmenu;鼠标右击菜单
* onmousewheel;鼠标滚轮
* 键盘事件
* onkeydownn;键盘按下时触发
* onkeypress;键盘按下按着不放时触发
* onkeyup;键盘按下抬起时触发
* 表单事件
* onsubmit
* 文本框事件
* onblur;失去焦点
* onchange;当文本框 的内容发生改变并且失去焦点时触发
* oninput;当文本框 的内容发生改变并且失去焦点时触发
* onfocus;获取焦点
* 窗口事件
* onload
* onresize;窗口的大小发生改变时触发
* onscroll;滚动
事件处理 程序:
1、处理元素样式
例:oDiv.style.boderColor = “red”
oDiv.style.cssText = “用字符串的方式写样式”
2,处理元素的内容
oDiv.innerHTML = "修改内容";【并且可以解析标签】
oDiv.innerHTML;获取内容
oDiv.innerText:获取内容【 "修改内容";【并且 **不解析标签】
oDiv.outerHTML:获取时会包含当前自己本身的标签,赋值时会覆盖自身标签以及它的子标签;
oDiv.outerText;同上;
表单元素:
input.value = "修改内容";
input.value;获取内容
3,处理元素的属性
oDiv.id = "修改"
oDiv.id;获取
oDiv.class:不用这个
oDiv.className
oDiv.style
七、数组的创建
两种方式:
字面量方式:
var arr = [ ]; 定义了一个空a数组arr
var arr = [1,2,3,4,32,23];定义了一个有6个具体元素的数组
构造函数的简单介绍。与对象
new Array( );【数组对象】
new Object( ); 【对象】
new Date( ); 【日期对象】
new String( ); 【字符串对象】
new Number( );
new Function( ); 【函数对象】
Math【数字对象】
RegExp 【正则对象
构造函数方式
//var brr = new Array(3,2,4);//创建了有3个元素的数组
//区别:
//var arr = [5];//object 创建一个元素为5的数组
//var brr = new Array(5);//创建了一个有5个空元素的数组,只要小括号中的值是一个数字,这个数字表示长度
//var brr = new Array("5");//创建了一个元素为字符串5的数组
//var brr = new Array(5,2);//创建了两个元素的数组
//数组的length属性:
//数组对象下有一个length属性,这个属性记录了数组的元素个数,length是数组的长度.
//数组的索引(下标);
var arr = [54,34,65,43,76];//索引为 0 1 2 3 4
七–01、 for in遍历数组(for…in只能遍历对象,数组也是对象)(不建议使用)
特点:
没有循环条件
自动取出下标
下标类型为string
七–02 、二维数组arr[ [ ],[ ] ];
数组存储数据,数组中的每一个元素。元素可以是任意的数据类型;
【注意】数组中的元素可以是数组,
二维数组;人为起的
.数组方法操作详解
数组是对像,对像有属性和方法
属性:
length属性:读写数据的长度
方法:
八、数组的API
改变原数组的方法:
push( ) 向数组的尾部添加一个或多个元素 用法:arr.push(21,12,23),返回新数组的长度,原数组改变
数组的两个方法形成栈结构;
push
格式;数组,push(参数1,参数2.。。。)
功能;给数组的末尾添加元素。 var arr = ["北京" , "上海" , "广州" , "天津"];
var res = arr.push( "深圳" , "成都" ,"广西");
alert(arr);//北京,上海,广州,天津,深圳,成都,广西
alert(res);//7
pop( ) 删除数组尾部的数据 一次删一个,用法:arr.pop();返回删除的元素,原数组改变
pop
格式;数组 pop()
参数;没有参数
返回值;从数组末尾取下一个元素
var arr = ["北京" , "上海" , "广州" , "天津"];
var res = arr .pop();
alert(res);// 返回值取末尾 天津
alert(arr);//取其它剩下的/北京,上海,广州
unshift( ) 向数组的头部添加一个或多个元素;
用法:arr.unshift(23,34,32),返回新数组的长度,原数组改变
unshift()
格式;数组, unshift( 参数1,参数2.。。 )
功能;从数组头部插入元素
返回值;;插完元素以后的数组的长度
var arr = ["唐朝" , "元朝" , "清朝"];
var res = arr.unshift( "秦朝" , "隋朝") ;
alert(res);//5
alert(arr);//"秦朝" , "隋朝","唐朝" , "元朝" , "清朝"
shift( ) 删除数组的第一个元素,返回删除的元素,原数组改变
shift()
格式;数组,shift()
参数;没有参数
功能;从数组的头部取下一个元素
返回值;取下的元素
例子;
var arr = ["唐朝" , "元朝" , "清朝"];
var res =arr.shift();
alert(res);//"唐朝"
alert(arr);// "元朝" , "清朝"
splice( ):
1、第一种方式:
arr.splice(start,length) 删除从开始位置 指定length个元素,返回删除的元素,如果不加length,则删除start位置及后面所有的元素。原数组改变
splice
格式;数组,splice(start,length,数据1,据2.。。。)
参数;
start 开始截取的位置
length 截取的元素的长度
第三个参数开始;在start位置,插入的元素;
返回值;截取下来的元素
增加
删除
修改(先删除再修改)
var arr= [10,20,30,40,50,60];
var res = arr.splice(1, 2 ,"hello","world");//两个参数是截取,从1下标位置开始后2个元素,截取的所有元素形成新的数组返回;
alert(arr); // 10,hello,world,40,50,60
alert(res); // 20,30
2、第二种方式
arr.splice(start,length,num参数) 如果length是0,在start位置处添加num数据,删除0个元素,返回空值,原数组改变
var arr= [10,20,30,40,50,60];
var res = arr.splice(2 , 0 ,"hello","world");
alert(arr); // 显示 10,20,hello,world,30,40,50,60
alert(res);//空
3、第三种方式;
arr.splice(start,length,num参数) 如果length是大于0,在start位置开始删除length个数据,再添加num数据,返回删除的元素,原数组改变
arr.reverse( );将数组倒序排列返回排列后的新数组
reverse()逆序 【改变原数组】
var arr= [10,"hello","world",60];
arr.reverse()
alert(arr); //60,world,hello,10
sort()
格式;数组,sort();
var arr= [13 , 11 , 14, 5 , 18 , 27];
arr.sort();
alert(arr);// 11,13,14,18,27,5 按字符串顺序输出
var arr = [1 ,5 ,3 ,4 ,17];
arr .sort(function(num1 , num2){
//添加函数
return num1 > num2;
})
alert(arr);//1,3,4,5,17
不改变原数组的方法
arr.slice(start,length);1.截取从start位置到length位置的元素返回截取元素组成的新数组
slice()
格式;数组,slice(start ,end)
功能;可以基于当前数组获取指定区域元素,【start ,end ),提取出元素生成新的数组;
返回值;生成的新数组,愿数组不会发生任何改变;
例子;
var arr = [10,11,12,13,14,15];
var newArr = arr.slice(1,4);
alert(newArr);// 11,12,13
alert(arr);//10,11,12,13,14,15
例子2;
var arr = [10,11,12,13,14,15];
var newArr = arr.slice(1);//一个参数,从这个参数下标位置到最后截取
alert(newArr);// 11,12,13,14,15
alert(arr);//10,11,12,13,14,15
2.如果参数只有start,.截取从start位置到数组最后返回截取元素组成的新数组
arr.join(“-“);使用“-”将数组元素连接起来返回一个字符串
join ()
格式;数组, join(将数组转字符串)
功能;将数组中的元素,用传入的拼接符,拼接成一个字符串
返回值;拼接好的字符串
var arr= [13 , 11 , 14, 5 , 18 , 27];
// alert(arr);
var str = arr.join("==.++");
alert(str);// 13==.++11==.++14==.++5==.++18==.++27
alert(arr);//13,11,14,5,18,27
arr.concat(brr,crr);将一个或多个数组所有元素拼接到arr后面,返回拼接后的新数组
concat
1.拷贝原数组,生成新的数组
2.合并数组;
格式;数组, concat ( 数组 , 数据)
返回值;合并成的新数组。原数组不会改变。
例子;
var arr=[10 , 11 ,12 ,13 ];
var arr2=[14, 15 ,16, 17];
var a = arr.concat(arr2 , "hello" , "true");
alert(a);//把arr+arr2的数全部合并
// 10,11,12,13,14,15,16,17,hello,true
alert(a.length);// 数组10个
alert(arr);//10,11,12,13