首页 > 技术文章 > 函数

justsilky 2017-05-14 18:08 原文

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

推荐阅读