函数名仅仅是指向函数的指针,function sum(){...} var anotherSum = sum; 注意,使用不带圆括号的函数名是访问函数指针,而非调用函数。如果要用anotherSum来调用函数的话,还是要加圆括号。js中函数没有重载的概念

1.函数声明   function functionName(arg0, arg1, arg2) {

                      //函数体}

2.函数表达式来定义函数

var functionName = function(arg0, arg1, arg2) {

         //函数体

     };     匿名函数赋值给一个变量

(function(){

    //函数体

})();       立即执行函数表达式  ,匿名函数

return function(){

//函数体

};             匿名函数

var add = function foo(a, b){

//函数体

};              命名式函数表达式,不常见。

3.函数构造器,不常用

 解析器对函数声明和函数表达式并非一视同仁,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到他所在的代码行,才会真正被解释执行。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
//    alert(outer());
//    function outer()
//    {
//        var localVal = 30;
//        return localVal;
//    }
    alert(foo());//要用foo来调用函数的时候必须得加上()
    var foo = function () {
        var localVal = 30;
        return localVal;//控制台报错Uncaught TypeError: foo is not a function 
    }
</script>
</body>
</html>

函数的声明和变量的声明会被提前。上面那个例子中var foo这个声明在alert的前面,这时foo还是一个undefined

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

高级程序设计里面内容:

var someFunction = function(){
//这里是块级作用域
};
someFunction();
这个例子先定义了一个函数,然后立即调用了它。定义函数的方式是创建一个匿名函数,并把匿名
函数赋值给变量someFunction。而调用函数的方式是在函数名称后面添加一对圆括号,即
someFunction()。通过前面的例子我们知道,可以使用实际的值来取代变量count,那在这里是不是
也可以用函数的值直接取代函数名呢? 然而,下面的代码却会导致错误。
function(){
//这里是块级作用域
}(); //出错!
这段代码会导致语法错误,是因为JavaScript 将function 关键字当作一个函数声明的开始,而函
数声明后面不能跟圆括号。然而,函数表达式的后面可以跟圆括号。要将函数声明转换成函数表达式,
只要像下面这样给它加上一对圆括号即可。

(function(){
//这里是块级作用域
})();