JavaScript高级
函数传参 – return关闭
函数’return’关键字
函数中’return’关键字的作用:
1、返回函数中的值或者对象
2、结束函数的运行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
window.onload = function(){
var input = document.getElementById("value");
alert(input.innerHTML);
var oDiv = document.getElementById("div1");
var oBtn = document.getElementById("btn");
function fnChange(sColor, sSize){
oDiv.style.color = sColor;
oDiv.style.fontSize = sSize;
}
// 如果函数没有返回值 那么返回undefined
oBtn.onclick = function(){fnChange('red', '30px');}
}
function fnAdd(iNum01, iNum02){
var result = iNum01 + iNum02;
document.getElementById("demo").innerHTML=result;
return; // 只写一个return 作用是在这一句函数结束运行
}
var oDiv = document.getElementById("div1");
var oBtn = document.getElementById("btn");
function fnChange(sColor, sSize){
oDiv.style.color = sColor;
oDiv.style.fontSize = sSize;
}
// 如果函数没有返回值 那么返回undefined
// oBtn.onclick = function(){fnChange('red', '30px');}
oBtn.onclick = "fnChange('red', '30px')";
</script>
</head>
<body>
<div id="value" >计算10+12</div>
<p id="demo">结果</p>
<input type="button" onclick="fnAdd(10,12)" value="点击计算">
<input type="button" id="btn" value="change css">
<div id="div1">这是一个div</div>
</body>
</html>
数组及操作方法
数组就是一组数据的集合,javascript中,数组里面的数据可以是不同类型的。
定义数组的方法
//对象的实例创建
var aList = new Array(1,2,3);
//直接量创建
var aList2 = [1,2,3,'asd'];
//属性 .length
//方法 push pop reverse indexOf splice join
<!DOCTYPE html>
<!-- <html lang="en"> -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 创建数组的第一种方法 面向对象
var aList01 = new Array(1, 2, 3);
// 创建数组方法2 直接量的方式
var aList02 = ['a', 'b', 'c', 'd'];
// 数组的方法与属性
// 获取数组成员的个数 -- 属性
var iLen = aList02.length;
alert(iLen);
// 操作数组的某个成员
alert(aList02[2]);
// 从数组后面增加成员 push()
aList02.push("e");
alert(aList02);
// 从数组后删除成员 pop()
aList02.pop();
alert(aList02);
// 将数组反转 reverse()
aList02.reverse();
alert(aList02);
// 获取某个成员在数组中第一次出现的索引值 indexOf()
var aList3 = ['a', 'b', 'c', 'd', 'c', 'd'];
var iPos = aList3.indexOf("c");
var iPos2 = aList3.indexOf("e")
alert(iPos);
alert(iPos2); // 数组中不存在该值时 就返回-1
// 在数组中增加或删除成员 splice()
aList3.splice(2, 1, 7, 8, 9); // 从第2个元素开始 删除1个元素 增加7 8 9
alert(aList3);
// join()将数组成员通过一个分隔 join()
var sTr = aList3.join("-");
var sTr2 = aList3.join("");
alert(sTr);
alert(sTr2);
// 多维度数组
var aList = [[1,2,3], ['a', 'b', 'c', 'd']];
alert(aList[0][1]);
</script>
</head>
<body>
</body>
</html>
循环语句
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var aList = ['a', 'b', 'c', 'd', 'e'];
var iLen = aList.length;
// i++ 相当于 i+=1
for(var i=0;i<iLen;i++){
alert(aList[i])
}
</script>
</head>
<body>
</body>
</html>
循环去重
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var aList = ['a', 'b', 'c', 'd', 'e', 'f', 'b', 'a', 'd', 'f'];
var aList2 = [];
for(var i=0;i<aList.length;i++){
if(aList.indexOf(aList[i])==i){
aList2.push(aList[i]);
}
};
alert(aList2);
</script>
</head>
<body>
</body>
</html>
字符串的处理方法
字符串合并操作:“ + ”
parseInt() 将数字字符串转化为整数
parseFloat() 将数字字符串转化为小数
split() 把一个字符串分隔成字符串组成的数组
indexOf() 查找字符串是否含有某字符
substring() 截取字符串 用法: substring(start,end)(不包括end)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
window.onload = function(){
var iNum01 = 12;
var sNum01 = '12';
var sNum02 = '12.45';
alert(iNum01 + 10); // 加法运算 22
alert(sNum01 + 10); // 字符串拼接 '1210' 如果有一边是字符串就做字符串拼接
// parseInt 将字符串转化为数值型数据
alert(parseInt(sNum01) + 10);
// parseFloat 将字符串转化为浮点数
alert(parseFloat(sNum02) + 10);
var sTr = '2018-05-07';
// split 拆分字符串为数组 -- 列表
var aList = sTr.split("-");
alert(aList);
var aList2 = sTr.split("");
alert(aList2);
// indexOf 获取某小段字符串在大段字符串里面的索引值
var sTr2 = 'abcdefg123456';
var iPos = sTr2.indexOf('e');
var iPos2 = sTr2.indexOf('-1');
alert(iPos);
alert(iPos2);
// substring 截取字符串
var sTr3 = sTr2.substring(3, 6);
alert(sTr3);
// 字符串反转
var sTr4 = sTr2.split("").reverse().join("");
alert(sTr4);
}
</script>
</head>
<body>
</body>
</html>
创建定时器
主要用于 移动动画 无缝滚动
定时器:
setTimeout 只执行一次的定时器
clearTimeout 关闭只执行一次的定时器
setInterval 反复执行的定时器
clearInterval 关闭反复执行的定时器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
function fnMyalert(){
alert("吃屎啦");
}
// fnMyalert();
// 设置定时器
// 创建只执行依次的定时器
// setTimeout(函数名称, 毫秒)
setTimeout(fnMyalert, 2000);
var oTimer = setTimeout(fnMyalert, 2000);
// 创建反复执行的定时器
var oTimer2 = setInterval(fnMyalert, 2000);
// 关闭反复执行的定时器
clearInterval(oTime2)
</script>
</head>
<body>
</body>
</html>
定时器动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.box{
width: 200px;
height: 500px;
background:gold;
position: fixed;
left: 0px;
top: 100px;
}
</style>
<script>
window.onload = function(){
var oDiv = document.getElementById("box")
var iLeft = 0;
var iSpeed = 3;
setInterval(fnMove, 30)
var oTimer = setInterval(fnMove, 30)
function fnMove(){
iLeft += iSpeed;
oDiv.style.left = iLeft + 'px';
if(iLeft>600){
iSpeed = -3;
}
if(iLeft<0){
iSpeed = 3;
}
}
// fnMove();
}
</script>
</head>
<body>
<div class="box" id="box">xxx</div>
</body>
</html>
无缝滚动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>无缝滚动</title>
<style type="text/css">
body,ul{
margin:0;
padding:0;
}
.list_con{
width:1000px;
height:200px;
border:1px solid #000;
margin:10px auto 0;
background-color:#f0f0f0;
position:relative;
overflow:hidden;
}
.list_con ul{
list-style:none;
width:2000px;
height:200px;
position:absolute;
left:0;
top:0;
}
.list_con li{
width:180px;
height:180px;
float:left;
margin:10px;
}
.btns_con{
width:1000px;
height:30px;
margin:50px auto 0;
position:relative;
}
.left,.right{
width:30px;
height:30px;
background-color:gold;
position:absolute;
left:-40px;
top:124px;
font-size:30px;
line-height:30px;
color:#000;
font-family: 'Arial';
text-align:center;
cursor:pointer;
border-radius:15px;
opacity:0.5;
}
.right{
left:1010px;
top:124px;
}
</style>
<script type="text/javascript">
window.onload = function(){
var oLeft = document.getElementById("btn01");
var oRight = document.getElementById("btn02");
var oUl = document.getElementById("list");
var oSlide = document.getElementById("slide");
// 将ul中的五个li复制一份
oUl.innerHTML = oUl.innerHTML + oUl.innerHTML
var iLeft = 0;
var iSpeed = -3;
// 定义一个变量存储 iSpeed值
var iLastSpeed = 0;
var oTimer = setInterval(fnMove, 30)
function fnMove(){
iLeft += iSpeed;
oUl.style.left = iLeft + 'px';
if(iLeft<-1000){
iLeft = 0
}
if(iLeft>0){
iLeft = -1000;
}
// 切换滚动的方法 点击左右箭头
oLeft.onclick = function(){
iSpeed = -3;
}
oRight.onclick = function(){
iSpeed = 3;
}
// 移入滚动停止 移出滚动继续
oSlide.onmouseover = function(){
// clearInterval(oTimer);
iLastSpeed = iSpeed;
iSpeed = 0;
}
oSlide.onmouseout = function(){
// oTimer = setInterval(fnMove, 30);
iSpeed = iLastSpeed;
}
}
}
</script>
</head>
<body>
<div class="btns_con">
<div class="left" id="btn01"><</div>
<div class="right" id="btn02">></div>
</div>
<div class="list_con" id="slide">
<ul id="list">
<li><a href=""><img src="images/goods001.jpg" alt="商品图片"></a></li>
<li><a href=""><img src="images/goods002.jpg" alt="商品图片"></a></li>
<li><a href=""><img src="images/goods003.jpg" alt="商品图片"></a></li>
<li><a href=""><img src="images/goods004.jpg" alt="商品图片"></a></li>
<li><a href=""><img src="images/goods005.jpg" alt="商品图片"></a></li>
</ul>
</div>
</body>
</html>
变量作用域
变量作用域指的是变量的作用范围,javascript中的变量分为全局变量和局部变量。
1、全局变量:在函数之外定义的变量,为整个页面公用,函数内部外部都可以访问。
2、局部变量:在函数内部定义的变量,只能在定义该变量的函数内部访问,外部无法访问。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 定义全局变量
var iNum01 = 12;
function fnMyalert(){
// 定义局部变量
var iNum02 = 24; // 函数内部定义局部变量 相当于在函数内部定义局部变量
iNum03 = 36; // 内部定义一个变量 相当于在函数内部定义全局变量
// 使用全局变量
alert('函数内部调用的全局变量'+iNum01);
alert('函数内部调用的局部变量'+iNum02);
iNum01 = 13;
}
fnMyalert();
alert('函数外部调用全局变量'+iNum01); // 13
alert("函数外部调用全局变量"+iNum03); // 这里不加var 他就是一个全局变量
</script>
</head>
<body>
</body>
</html>
封闭函数
封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。
还可以在函数定义前加上“~”和“!”等符号来定义匿名函数
函数体提前执行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="js/touzi.js"></script>
<script src="js/tishi.js"></script>
<script>
fnTouzi();
</script>
</head>
<body>
</body>
</html>
js文件
/*
function fnWrap(){
function fnTouzi(){
alert("亲, 请关注网站新的产品!");
}
fnTouzi();
}
fnWrap();
*/
// 上面的定义方法 函数名称还可能同名 可以改写成下面封闭函数的形式
;;;;;
// 一个分号代表一个空的js语句
;(function(){
function fnTouzi(){
alert("亲, 请关注网站新的产品!");
}
fnTouzi();
})();
// ()函数体 () 执行
// 封闭函数 没有名称 函数体提前
// 牛逼
/*
;!function(){
function fnTouzi(){
alert("亲, 请关注网站新的产品!");
}
fnTouzi();
}();
*/
;~function(){
function fnTouzi(){
alert("亲, 请关注网站新的产品!");
}
fnTouzi();
}();
js文件
function fnTouzi(){
alert("请输入投资金额:")
}