函数定义

函数声明 function

1
2
3
4
5
6
7
8
# 有参函数
function 函数名(参数){
函数体
}
# 无参函数
function 函数名(){
函数体
}

特点
函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。

函数调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 函数调用
# 函数名(); 无参函数调用
# 函数名("xiaoming"); 有参函数调用


# 无参调用案例
function fun(){}
fun();


# 有参函数调用
function getfun(x,y){
console.log(x,y);
}
getfun("小菲菲","小灿灿");

案例2

1
2
3
4
5
6
7
8
9
# 无参函数
function fun(){
console.log("xiaofeifei");
}

# 有参函数
function fn(x,y){
console.log("得到的值x为"+x,"得到的值y为"+y);
}

全局条件触发函数

1
2
3
4
5
6
7
8
9
10
11
 var val= prompt("请输入内容");
if(val=="小灿灿"){
getname(val)
}else{
getname("不是小灿灿");
}

function getname(x){
console.log("恭喜你输入"+x);
}

函数体内执行判断条件

1
2
3
4
5
6
7
8
9
var val= prompt("请输入内容");
getfeifei(val);
function getfeifei(x){
if(x=="小菲菲"){
console.log("恭喜你输入"+x);
}else{
console.log("恭喜你输入不是小菲菲");
}
}

作用域

什么是作用域(Scope)

通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
JS作用域: 就是代码名字(变量)作用的范围
作用域的目的:是为了提高程序的可靠性,更重要的是减少命名冲突

JS的作用域的分类(ES6之前)

JS作用域可以分为两大类:全局作用域 、局部作用域(函数作用域)

全局作用域:

直接编写在 script 标签之中的JS代码,都是全局作用域;
或者是一个单独的 JS 文件中的。
全局作用域在页面打开时创建,页面关闭时销毁;
在全局作用域中有一个全局对象 window(代表的是一个浏览器的窗口,由浏览器创建),可以直接使用。

局部作用域(函数作用域):

在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用
调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁;
每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。

全局变量和局部变量的区别:

全局变量:在任何一个地方都可以使用,全局变量只有在浏览器关闭的时候才会销毁,比较占用内存资源
局部变量:只能在函数内部使用,当其所在代码块被执行时,会被初始化;当代码块执行完毕就会销毁,因此更节省节约内存空间;

变量的声明提前和函数的声明提前

变量的声明提前

使用 var 关键字声明的变量,会在所有的代码执行之前被声明。(但是不会赋值)
全局变量即使是写在最下面,也相当于在所有代码之前的最上面声明的变量。

1
2
console.log(a);//undefined
var a="小灿灿"

如果声明变量的时候不使用 var 关键字,那么变量就不会被声明提前。

1
2
3
console.log(a)// a is not defined
a="关关雎鸠";

(如果不写 var 关键字,变量声明就无法提前,所以在 console.log前面就找不到 变量,所以返回结果报错)

函数的声明提前

使用函数声明形式创建的函数 :function 函数名() {};
它会在所有代码执行之前就被创建。所以可以在函数声明之前被调用

1
2
3
4
5
fun();
function fun(){
console.log("hello world!");
}

使用函数表达式创建的函数:var 变量名 = function(){};
不会被声明提前,所以不能再声明前调用。

1
2
3
4
fun()
var fun=function(){
console.log("这是一个fun函数");
}