JavaScript 函式語法

TOBENUMBER萬發表於2019-03-24

函式就是包裹在花括號中的程式碼塊,前面使用了關鍵詞 function:

function functionname()
{
這裡是要執行的程式碼
}

當呼叫該函式時,會執行函式內的程式碼。

可以在某事件發生時直接呼叫函式(比如當使用者點選按鈕時),並且可由 JavaScript 在任何位置進行呼叫。

提示:JavaScript 對大小寫敏感。關鍵詞 function 必須是小寫的,並且必須以與函式名稱相同的大小寫來呼叫函式。
呼叫帶引數的函式

在呼叫函式時,您可以向其傳遞值,這些值被稱為引數。

這些引數可以在函式中使用。

您可以傳送任意多的引數,由逗號 (,) 分隔:

myFunction(argument1,argument2)

當您宣告函式時,請把引數作為變數來宣告:

function myFunction(var1,var2)
{
這裡是要執行的程式碼
}

變數和引數必須以一致的順序出現。第一個變數就是第一個被傳遞的引數的給定的值,以此類推。
例項

<button onclick="myFunction('Bill Gates','CEO')">點選這裡</button>

<script>
function myFunction(name,job)
{
alert("Welcome " + name + ", the " + job);
}
</script>

上面的函式會當按鈕被點選時提示 “Welcome Bill Gates, the CEO”。
帶有返回值的函式

有時,我們會希望函式將值返回撥用它的地方。

通過使用 return 語句就可以實現。

在使用 return 語句時,函式會停止執行,並返回指定的值。
語法

function myFunction()
{
var x=5;
return x;
}

上面的函式會返回值 5。
註釋:整個 JavaScript 並不會停止執行,僅僅是函式。JavaScript 將繼續執行程式碼,從呼叫函式的地方。

函式呼叫將被返回值取代:

var myVar=myFunction();

myVar 變數的值是 5,也就是函式 “myFunction()” 所返回的值。

即使不把它儲存為變數,您也可以使用返回值:

document.getElementById("demo").innerHTML=myFunction();

“demo” 元素的 innerHTML 將成為 5,也就是函式 “myFunction()” 所返回的值。

您可以使返回值基於傳遞到函式中的引數:
例項

計算兩個數字的乘積,並返回結果:

function myFunction(a,b)
{
return a*b;
}

document.getElementById("demo").innerHTML=myFunction(4,3);

“demo” 元素的 innerHTML 將是:

12

在您僅僅希望退出函式時 ,也可使用 return 語句。返回值是可選的:

function myFunction(a,b)
{
if (a>b)
  {
  return;
  }
x=a+b
}

如果 a 大於 b,則上面的程式碼將退出函式,並不會計算 a 和 b 的總和。

區域性 JavaScript 變數

在 JavaScript 函式內部宣告的變數(使用 var)是區域性變數,所以只能在函式內部訪問它。(該變數的作用域是區域性的)。

您可以在不同的函式中使用名稱相同的區域性變數,因為只有宣告過該變數的函式才能識別出該變數。

只要函式執行完畢,本地變數就會被刪除。



全域性 JavaScript 變數

在函式外宣告的變數是全域性變數,網頁上的所有指令碼和函式都能訪問它。



JavaScript 變數的生存期

JavaScript 變數的生命期從它們被宣告的時間開始。

區域性變數會在函式執行以後被刪除。

全域性變數會在頁面關閉後被刪除。


向未宣告的 JavaScript 變數來分配值

如果您把值賦給尚未宣告的變數,該變數將被自動作為全域性變數宣告。

這條語句:

carname=“Volvo”;

將宣告一個全域性變數 carname,即使它在函式內執行。



匿名函式
概念:
匿名函式指的是沒有函式名稱的函式。
作用:可以有效的避免全域性變數的汙染以及函式名的衝突問題。
說明:既是函式表示式的另一種表示形式,又可通過函式宣告的方式實現呼叫

省略函式名

var fn = function (num1, num2) {
return  num1 + num2;
};
fn(1, 2)

自呼叫
(function (num1, num2) {
return  num1 + num2;})(1,  2);

處理事件

document.body.onclick  = function () {
alert('Hi, everybody!');
};

自呼叫方式也稱為立即執行函式,此函式只能是函式表示式,不能是函式宣告。
它的作用是:建立一個獨立的作用域,避免被同名變數覆蓋。

var   car = (function() {
var   speed = 0;
return {start: function() {
speed = 60;},getSpeed: function() {
return speed;
}
}
})();
car.start();
console.log(car.getSpeed());

回撥函式
概念:回撥函式指的是一個函式A作為引數傳遞給一個函式B,然後在B的函式體內呼叫函式A。函式A稱為回撥函式。
提示:匿名函式常用作函式的引數傳遞,實現回撥函式。
應用:函式體中某部分功能由呼叫者決定,此時可以使用回撥函式。
在JavaScript中還為陣列提供了很多利用回撥函式實現具體功能的方法

巢狀函式
概念:在一個函式內部存在另一個函式的宣告
特點:內層函式只能在外層函式作用域內執行,在內層函式執行的過程中,若需要引入某個變數,首先會在當前作用域中尋找,若未找到,則繼續向上一層級的作用域中尋找,直到全域性作用域,我們稱這種鏈式的查詢關係為作用域鏈.

var iBaseNum= 10;
 function addNum(iNum1, iNum2) { 
 function doAdd() { 
 return iNum1 + iNum2 + iBaseNum;
  } 
  return doAdd(); 
  }

閉包函式
在JavaScript中,內嵌函式可以訪問定義在外層函式中的所有變數和函式,幷包括其外層函式能訪問的所有變數和函式。但是在函式外部則不能訪問函式的內部變數和巢狀函式。此時就可以使用"閉包"來實現。
所謂"閉包"指的是有權訪問另一函式作用域內變數(區域性變數)的函式,也就是閉包由函式以及建立該函式的詞法環境組合而成。
它最主要的用途是以下兩點:
可以在函式外部讀取函式內部的變數。
可以讓變數的值始終保持在記憶體中。



常見建立方式:就是在一個函式內部建立另一個函式,通過另一個函式訪問這個函式的區域性變數

function fn() {
var times = 0;
var c = function () {
return ++times;
};
return c;
}
var count = fn(); // count是一個閉包
// 訪問測試
console.log(count())
;console.log(count());
console.log(count());
console.log(count());
console.log(count());

用閉包模擬私有方法,提供類似物件導向的資料隱藏和封裝。

相關文章