函数的基本概念
函数也是js中的一种复杂类型
函数可以封装一段重复的代码, 只需要声明一次, 可以重复的调用。
声明与调用:
function 函数名() { 函数体 }
函数名();
函数的参数
形参:在函数声明的时候,定义的参数,作用:占位置,没有具体的值
实参:在函数调用的时候传递的参数,作用:把实参的值赋值给形参。
函数的返回值
如果希望函数内部能够返回一些值被外部使用。需要使用return把结果返回出来。
函数三要素
函数名
参数
返回值
全局变量和局部变量
作用域:变量起作用的区域
全局作用域:在script标签内,并且在函数外的区域,在全局作用域中定义的变量是全局变量,全局变量可以在任意地方使用。
局部作用域:在js中,只有函数可以形成作用域,一个函数就能形成一个局部作用域
在函数内部定义的变量,只能在当前函数内使用。局部变量。
全局变量: 在全局作用域或者局部作用域中都可以访问
局部作用: 只有在当前函数内可以访问
预解析
浏览器在执行js代码之前,预先把所有的变量声明和函数声明提前
- 找到所有函数声明,提前, 不会提升函数调用 如果函数同名,下面的函数会覆盖上面的。
- 找到所有的变量声明 var,提前, 不会提升赋值。 如果遇到了多个同名的变量,忽略
fn2();
function fn2() {
console.log(a);
var b = 9;
console.log(b);
}
var a = 18;
隐式全局变量
变量可以不声明,可以直接赋值,没有声明的变量,叫做隐式全局变量(杜绝) 浏览器不认识这个变量,又给这个变量赋值了,才是隐式全局变量。
fn3();
console.log(c);
console.log(b);
console.log(a);
function fn3() {
var a = b = c = 9;
// c = 9;
// b = 9;
// var a = 9;
console.log(a);
console.log(b);
console.log(c);
}
声明函数的两种方式
函数声明:
// 函数的声明的语法
// 可以先调用,后声明
function fn() {
console.log('哈哈哈');
}
fn();
函数表达式:
// 函数表达式
// 必须先声明,才能调用
var fn = function() {
console.log('嘻嘻嘻');
}
fn();
匿名函数
匿名函数:没有名字的函数
- 把匿名函数赋值给一个变量,通过变量来调用 函数表达式
var fn = function () {
console.log('呵呵');
}
fn();
自执行函数:把函数声明和调用写到一起,自执行函数
匿名函数自执行:
(function() {
console.log('hehe');
})();
匿名函数自调用:也叫沙盒 沙箱
作用:防止全局变量污染