1. 程式人生 > >JS 基礎篇(四):JS中的函式

JS 基礎篇(四):JS中的函式

目錄:

簡單介紹下關於JS函式使用過程中的一些情況。

一、函式的引數

1、呼叫函式時沒有提供足夠的引數,缺少的引數將會被underfined替代。

function add(a,b){
    console.log("a:"+a); // a:1
    console.log("b:"+b);// b:underfined
    return a + b;
}
console.log(add(1)); //NaN 1和underfined相加為NaN

2、呼叫引數時,給予了超過要求個數的引數,多餘的將會被忽略。

function add(a,b){
    console.log("a:"+a);
    console.log("b:"+b);
    return a + b;
}
console.log(add(2,3,8));//5  第三個引數“8”時多餘的,被忽略了。

注:函式實際上是訪問了函式體中一個名為 arguments 的內部物件,這個物件就如同一個類似於陣列的物件一樣,包括了所有被傳入的引數。

二、函式的返回值

1、在函式中return 語句在返回一個值並結束函式。如果沒有使用 return 語句,或者一個沒有值的 return 語句,JavaScript 會返回 undefined。

function returnNone1(){

}
console.log(returnNone1());//underfined

function returnNone2(){
    return ;
}
console.log(returnNone2());//underfined

三、立即執行函式

1、問題描述: 通常我們在宣告函式之後,通過在後面新增括號進行執行,如下程式碼所示:

var foo = function(){ /* code */}
foo();

那麼這個是不是意味著我們在宣告函式的時候直接在它後面新增括號,它就可以立即執行了,比如這樣:

function(){ /* code */ }();

然而執行時會報錯,因為在解析器解析全域性的function或者function內部function關鍵字的時候,預設是認為function宣告,而不是function表示式。

2、解決方案: 只要我們讓解析器知道我們這個地方代表著是function表示式就行了。 如下所示:

//1、使用“()”
(function () { /* code */ } ()); // 推薦使用這個
(function () { /* code */ })(); // 但是這個也是可以用的

//2、由於括弧()和JS的&&,異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的,所以一旦解析器知道其中一個已經是表示式了,其它的也都預設為表示式了。
var i = function () { return 10; } ();
true && function () { /* code */ } ();
0, function () { /* code */ } ();

// 3、如果你不在意返回值,或者不怕難以閱讀,你甚至可以在function前面加一元操作符號。
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();

//4、使用new關鍵字,也可以用
new function () { /* code */ }
new function () { /* code */ } () // 如果需要傳遞引數,只需要加上括弧()