創(chuàng)建函數(shù)的方式:函數(shù)聲明玩敏、函數(shù)表達式、還有一種不常見的方式就是Function構(gòu)造器。
函數(shù)聲明:
function add(a,b) {
a = +a;
b = +b;
if (isNaN(a) || isNaN(b)) {
return;
}
return a + b;
}
函數(shù)表達式的幾種方式:
// 函數(shù)表達式
var add = function(a, b) {
// do sth
}
// 匿名函數(shù)定義的一個立即執(zhí)行函數(shù)表達式
(function() {
// do sth
})();
// 作為返回值的函數(shù)表達式
return function() {
// do sth
};
// 命名式函數(shù)表達式
var add = function foo (a, b) {
// do sth
}
函數(shù)聲明與函數(shù)表達式的主要區(qū)別就是:函數(shù)聲明會被前置
函數(shù)聲明前置:
// function add(a,b) 已經(jīng)聲明前置了,可以正常調(diào)用
var num = add(1, 2);
console.log(num); // 3
function add(a,b) {
a = +a;
b = +b;
if (isNaN(a) || isNaN(b)) {
return;
}
return a + b;
}
函數(shù)表達式前置:
// var add 變量聲明提前,此時變量的值是undefined
var num = add(1, 2);
console.log(num); // TypeError:undefined is not a function
var add = function(a, b) {
a = +a;
b = +b;
if (isNaN(a) || isNaN(b)) {
return;
}
return a + b;
}
Function構(gòu)造器:
var func = new Function('a', 'b', 'console.log(a+b);');
fun(1, 2); // 3
// 和上面的方式?jīng)]有區(qū)別
var func = Function('a', 'b', 'console.log(a+b);');
func(1, 2); // 3
區(qū)別:
360截圖20170307114742162.png