JavaScript函数表达式 学习篇

定义函数的方式有两种,一种是函数声明,另一种就是函数表达式。

函数声明的语法:

function sayHello(){
    alert("hello")
}

首先是function关键字,然后是函数名。

函数声明提升:可以先调用函数,而函数声明放在其后,因为执行函数前会读取函数声明

sayHello();
function sayHello(){
    alert("hello")
}

接下来是函数表达式创建函数的方法:

var sayHello = function(){
    alert("hello")
}
sayHello();

这样创建的函数也成为 匿名函数(拉姆达函数) 因为function后面没有标识符。

当然了,用函数表达式创建的函数就不能像上面函数表达式创建的函数一样 先调用函数 再声明了 会报错(函数还不存在)。

千万不要这么做:

var a = false;
if (a) {
    function sayHello(){
        alert("hello")
    }
}else{
    function sayHello(){
        alert("a is false")
    }
};

表面上根据a的boolean值返回不同的函数,但是大多数浏览器会返回第二个声明(火狐会在a为true时返回第一个声明)。

那怎么办呢 , 使用函数表达式就没问题了:

var a = false;
var sayHello;
if (a) {
    sayHello = function(){
        alert("hello")
    }
}else{
    sayHello = function(){
        alert("a is false")
    }
};

不同的函数会根据a的boolean值被赋值给sayHello。

能创建函数再赋值给变量,也就意味着函数可以作为其它函数的返回值返回:

function returnFunction(){
    return function subFunction(){
        alert("son function")
    }
}
var a = returnFunction()
alert(a.name)

a.name = subFunction,还可以返回匿名函数:

function returnFunction(name){
    return function(){
        return name
    }
}
var a = returnFunction("white55开")
var b = a()
alert(b) 

b = "white55开"

这并不是匿名函数唯一的用途,更多用途会在开发中遇到

posted @ 2017-01-20 10:24  程序员大亨  阅读(167)  评论(0编辑  收藏  举报