函数
函数的含义:程序的基本单元,是完成特定任务的代码语句块
语法:
function functionname() {
这里是要执行的代码
}
例:
<button οnclick="myFunction()">点击这里</button>
<script>
function myFunction(){
alert("Hello World!");
}
</script>
函数分类
系统函数
如parseInt( )
自定义函数
如luck( )
常用系统函数
parseInt ("字符串"):将字符串转换为整型数字
例:
document.write(parseInt(3.5)+"<br/>");
//parseInt() 解析一个字符串,返回一个整数
document.write(parseInt("3.5")+"<br/>");
//会对字符进行判断是否为有效数字,如果不是返回NaN
document.write(parseInt("abc3")+"<br/>");
document.write(parseInt("3.6abc")+"<br/>");
parseFloat("字符串"):将字符串转换为浮点型数字
例:
document.write(parseFloat("3.7")+"<br/>");
document.write(parseFloat("3.7abc")+"<br/>");
document.write(parseFloat("abc3.7")+"<br/>");
//第一个出现的小数点是有效字符,如果有两个小数点,第二个小数点被视作无效 document.write(parseFloat("3.7.6abc")+"<br/>");
isNaN( ):用于检查其参数是否是非数字形式
例:
document.write(isNaN("3.7")+"<br/>");
document.write(isNaN("3.7abc")+"<br/>");
自定义函数
简单理解自定义函数即可以自己命名的函数
例:
<button οnclick="myFunction()">点击这里</button>
<script>
function myFunction(){
alert("Hello World!");
}
</script>
练习:显示菜单
需求说明:使用自定义函数创建函数 当鼠标单击“前端课程”标题时,显示二级内容
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="css/myCss.css">
<script src="js/myJs.js"></script>
</head>
<body>
<h2 onclick="show()">前端课程</h2>
<ul id="test">
<li>HTML5</li>
<li>CSS3</li>
<li>jQuery</li>
<li>Canvas</li>
</ul>
</body>
</html>
CSS:
*{
list-style: none;
padding: 0;
margin: 0;
}
ul li{
width: 150px;
height: 35px;
line-height: 35px;
text-align: center;
background-color: orange;
}
ul{
display: none;
}
JS:
function show(){
var ul=document.getElementById("test");
ul.style.display="block";
}
带参函数
定义:
function 函数名(参数1,参数2) {
//JavaScript语句;
}
调用:
事件名="函数名( 参数1,参数2 )" ;
例:
<input name="btn" type="button" value="欢迎你,点我" οnclick="study(3)" />
function study(count){
for(var i = 1;i<=count;i++){
document.write(i+"-欢迎学习JS函数<br/>");
}
}
命名函数
如果函数有名字,就是命名函数
functuin f1(){
}
匿名函数
如果函数没有名字,就是匿名函数
functuin (){
}
定义函数
定义函数的两种方式
函数声明
function 函数名 () { //函数体 }
函数表达式
var 变量 = 匿名函数 ;
把一个函数给一个变量,此时形成了函数表达式
例:
function f1(){
console.log("哈哈哈")
}
f1();
var f2=function(){
console.log("你好");
};
f2();
函数声明和函数表达式二者区别
function f1() {
console.log("哈哈哈");
}
f1();
function f1() {
console.log("你好");
}
f1();
var f2=function(){
console.log("函数表达式");
};
f2();
var f2=function(){
console.log("函数声明");
};
f2();
函数声明:如果出现两个一样的函数,后面的会覆盖前面函数
函数自调用
一般函数:
function 函数名() {
//函数体
}
函数名();
自调用:
(function(){
//函数体
})();
函数的数据类型
function f1() {
console.log("我是函数");
}
f1();
console.log(typeof f1);
函数是有数据类型,它的数据类型是:function
回调函数
函数A作为参数传递到另一个函数B中,并且这个函数B执行函数A。就说函数A叫做回调函数
例:
function f1(fn){
fn();
}
function f2(){
console.log("我是回调函数哦~");
}
f1(f2);
函数可以作为返回值使用
例:
function f1() {
console.log("f1函数调用了");
return function () {
console.log("这是一个函数");
};
}
var ff = f1();
ff();
作用域&块级作用域
作用域:作用域就是在这一个区域内有作用(使用范围)
块级作用域:一对大括号就可以看成是一块
{
var num=10;
}
console.log(num);
if(true) {
var num=20;
}
console.log(num);
for(var i=0;i<5;i++) {
var num=30;
}
console.log(num);
function f1() {
var num=50;
}
f1();console.log(num);
JS中没有块级作用域,但是函数除外
局部变量VS全局变量
全局变量:在函数外声明的变量,网页上的所有脚本和函数都能访问它
局部变量:在函数内部声明的变量(使用var),只能在函数内部访问它
可以在不同的函数中使用名称相同的局部变量
生存期
局部变量在函数运行以后被删除
全局变量在页面关闭后被删除
全局变量和局部变量区别:作用域不同、声明位置不同、生存期不同
隐式全局变量VS全局变量
隐式全局变量:指声明变量时没有使用声明变量的关键字
var a1=1; //全局变量
a2=2; //隐式全局变量
delete a1;
delete a2;
console.log(typeof a1);//number
console.log(typeof a2);//undefined
隐式全局变量是可以被删除的,但是全局变量是不能被删除的
作用域链
沿着作用域链一级一级地搜索的过程。搜索过程始终从作用域链底端开始,然后逐级向上回溯,直到找到为止(如果找不到,通常会报错)
var num = 10;
function f1 () {
var num = 20;
function f2 () {
var num = 30;
function f3 () {
var num = 50;
console.log(num);
}
f3();
}
f2();
}
f1();
预解析
console.log(num);
var num=10;
f1();
function f1() {
console.log(num);
var num=10;
}
1、变量的声明提前了----提前到当前所在的作用域的最上面
2、函数的声明也会被提前---提前到当前所在的作用域的最上面