1. 声明式函数
function add() {
}
2. 函数表达式
var add = function(){
};(function后面不带有函数名)
3. 函数的重复声明
重复声明同一个函数,后面的函数会覆盖前面的声明。
4. 参数,return
参数分为:1.形式参数(形参,函数定义时的参数);
2.实际参数(实参,调用函数时赋值进去的参数)
一个函数只能返回一次retrun
function add(x,y) {
return x+y;
}
add(1,1) // 2
5. 立即调用函数表达式
防止声明里的变量对其他作用域造成影响。
(function(){}());
// 或者
(function(){})();
// 或者
~~function(){}();
// 或者
!!function(){}();
6. 函数名的提升
预解析:程序执行前的准备工作
函数预解析:函数形参在函数预解析时初始化(赋值)
预解析时会找到var声明的变量和声明式函数。给var声明的变量一个默认值 undefined。声明式函数执行。
没有在函数内部声明的变量称为全局变量。
函数内部用到的变量的取值范围是在函数声明时确定的。
var a = 1;
var fn = function() {
console.log(a);
};
function fn1() {
var a = 2;
fn();
}
fn1(); //1
自由变量:没有在当前作用域内声明的变量(相对)
function fn(x,y) {
var x = 1;
function fn1(x,y) {
}
}
x相对于fn1是自由变量,而相对于fn就不是自由变量
7. 作用域
作用域(scope)指的是变量存在的范围。
JS内只有两种作用域:1.全局作用域;2.函数作用域(局部作用域)
(1) 在函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。
(2) 在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。
(3) 函数内部定义的变量,会在该作用域内覆盖同名全局变量。
var a = 1;
var fn = function() {
console.log(a);
};
function fn1() {
var a = 2;
fn();
}
fn1(); //1