1. 程式人生 > >JavaScript function函式種類

JavaScript function函式種類

  本篇主要介紹普通函式、匿名函式、閉包函式

目錄

1. 普通函式:介紹普通函式的特性:同名覆蓋、arguments物件、預設返回值等。

2. 匿名函式:介紹匿名函式的特性:變數匿名函式、無名稱匿名函式。

3. 閉包函式:介紹閉包函式的特性。

1. 普通函式

1.1 示例

function ShowName(name) {
    alert(name);
}

1.2 Js中同名函式的覆蓋

在Js中函式是沒有過載,定義相同函式名、不同引數簽名的函式,後面的函式會覆蓋前面的函式。呼叫時,只會呼叫後面的函式。

var n1 = 1;

function add(value1) {
    return n1 + 1; 
}
alert(add(n1));//呼叫的是下面的函式,輸出:3

function add(value1, value2) {
    return value1 + 2;
}
alert(add(n1));//輸出:3

1.3 arguments物件

arguments 類似於C#params,操作可變引數:傳入函式的引數數量大於定義時的引數數量。

function showNames(name) {
    alert(name);//張三
    for (var i = 0; i < arguments.length; i++) {
        alert(arguments[i]);//張三、李四、王五
    }
}
showNames('張三','李四','王五');

1.4 函式的預設返回值

若函式沒有指明返回值,預設返回的是'undefined'

function showMsg() {
}
alert(showMsg());//輸出:undefined

2.匿名函式

2.1 變數匿名函式

2.1.1 說明

可以把函式賦值給變數、事件。

2.1.2 示例

//變數匿名函式,左側可以為變數、事件等
var anonymousNormal = function (p1, p2) { 
    alert(p1+p2);
}
anonymousNormal(3,6);//輸出9

2.1.3 適用場景

①避免函式名汙染。若先宣告個帶名稱的函式,再賦值給變數或事件,就造成了函式名的濫用。

2.2 無名稱匿名函式

2.2.1 說明

即在函式宣告時,在後面緊跟引數。Js語法解析此函式時,裡面程式碼立即執行。

2.2.2 示例

(function (p1) {
    alert(p1);
})(1);

2.2.3 適用場景

①只需執行一次的。如瀏覽器載入完,只需要執行一次且後面不執行的功能。

3. 閉包函式

3.1 說明

 假設,函式A內部聲明瞭個函式B,函式B引用了函式B之外的變數,並且函式A的返回值為函式B的引用。那麼函式B就是閉包函式。

3.2 示例

3.2.1 示例1:全域性引用與區域性引用

function funA() {
    var i = 0;
    function funB() { //閉包函式funB
        i++;
        alert(i)
    }
    return funB;
}
var allShowA = funA(); //全域性變數引用:累加輸出1,2,3,4等

function partShowA() {
    var showa = funA();//區域性變數引用:只輸出1
    showa();
}

allShowA是個全域性變數,引用了函式funA。重複執行allShowA(),會輸出1,2,3,4等累加的值。

執行函式partShowA(),因為內部只聲明瞭區域性變數showa來引用funA,執行完畢後因作用域的關係,釋放showa佔用的資源。

閉包的關鍵就在於作用域:全域性變數佔有的資源只有當頁面變換或瀏覽器關閉後才會釋放。var allShowA = funA() 時,相當於allShowA引用了funB(),從而使funB()裡的資源不被GC回收,因此funA()裡的資源也不會。

3.2.2 示例2:有參閉包函式

function funA(arg1,arg2) {
    var i = 0;
    function funB(step) {
        i = i + step;
        alert(i)
    }
    return funB;
}
var allShowA = funA(2, 3); //呼叫的是funA arg1=2,arg2=3
allShowA(1);//呼叫的是funB step=1,輸出 1
allShowA(3);//呼叫的是funB setp=3,輸出 4

3.2.3 示例3:父函式funA內的變數共享

function funA() {
    var i = 0;
   function funB() {
        i++;
        alert(i)
    }
    allShowC = function () {// allShowC引用匿名函式,與funB共享變數i
        i++;
        alert(i)
    }
    return funB;
}
var allShowA = funA(); 
var allShowB = funA();//allShowB引用了funA,allShowC在內部重新進行了繫結,與allShowB共享變數i

3.3 適用場景

①保證函式funA內裡的變數安全,因為外部不能直接訪問funA的變數。

相關推薦

JavaScript function函式種類

  本篇主要介紹普通函式、匿名函式、閉包函式 目錄 1. 普通函式:介紹普通函式的特性:同名覆蓋、arguments物件、預設返回值等。 2. 匿名函式:介紹匿名函式的特性:變數匿名函式、無名稱匿名函式。 3. 閉包函式:介紹閉包函式的特性。 1. 普通函式 1.1 示例 functio

JavaScript Function 函式深入總結

整理了JavaScript中函式Function的各種,感覺函式就是一大物件啊,各種知識點都能牽扯進來,不單單是 Function 這個本身原生的引用型別的各種用法,還包含執行環境,作用域,閉包,上下文,私有變數等知識點的深入理解。函式中的returnretur

JavaScript Function,建立函式物件(new Function()),字串當代碼來執行

demo.html:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>

JavaScript Function函式宣告、函式表示式

什麼是函式 所謂函式,本質上上i 一種程式碼的分組形式,我們可以通過這種形式賦予某組程式碼一個名字,以便於之後的呼叫。( 函式也是資料 可以將函式視為一種特殊的資料型別 ) 栗子: function sum(a,b){ var c = a +

javascript學習記錄(二)-function函式的應用之sort()函式詳解

javascript 雖然式一種弱指令碼語言,但是他也是支援函式的宣告的,此處的函式和java中的函式是有很大差別的。其中值得一提的是javascript 不支援重寫舉個栗子:function someFunction(num1){ console.info(num1);

JavaScript學習筆記之function函式改變form表單的action跳轉到指定頁面

<body> <form name="form1" action="" method="post"> 患者名字:<input type="text" name="username" value="zhang" /><br /

JavaScript 高階函式(Heigher-order function

個人部落格 概念 《javascript設計模式和開發實踐》中定義 函式既可作為引數被傳遞,也可以作為返回值輸出 滿足以下條件: 接受一個或多個函式作為輸入 輸出一個函式 高階函式一般是那些函式型包含多於函式。在函數語言程式設計中,返回另一個函式的高階函式被稱為Curry化的函式。 函式作為引數傳遞

JavaScript入門-函式function(二)

## JavaScript入門-函式function(二) ### 遞迴函式 - 什麼是遞迴函式? 遞迴簡單理解就是,在函式體裡,呼叫自己。 ``` //我們在求一個10的階乘的時候,可能會這麼做 //寫一個迴圈 var total = 1 for(var i=10; i>=

[WASM] Call a JavaScript Function from WebAssembly

.com namespace byte ray ant log this span ide Using WASM Fiddle, we show how to write a simple number logger function that calls a cons

[Rust] Pass a JavaScript Function to WebAssembly and Invoke it from Rust

his scrip wrap pro mis document java env load In some cases it’s useful to be able to invoke a JavaScript function inside Rust. Thi

Pytorch loss function函式總結

注意: 很多的loss 函式都有size_average和reduce倆個布林型別的引數。因為一般損失函式都是直接計算batch的資料,因此返回的loss結果都是維度(batch_size, )的向量。 如果 reduce = False,那麼 size_average 引數失

Shell之function函式的定義及呼叫

文章目錄 `function`函式的定義及呼叫 `function`函式的定義 `function`函式的呼叫【位置傳參】 函式使用return返回值【位置傳參】 函式的呼叫【陣列傳參】

JavaScript常用函式總結

 最近正在學習js語法,講到函式這一塊內容,感覺有些細節還是挺有用的,所以發文總結一下。      javascript這門語言本身就是一種弱型別語言,它不和像java, c ,c#等等這些語言一樣,在宣告變數和方法的時候不需要對齊進行指定資料型別的修飾,

JavaScript節流函式

var throttle = function(fn, delay, mustRunDelay){ var timer = null; var start; // 這裡是利用一個閉包來儲存變數,避免汙染全域性變數 return function(){

深入理解Javascript箭頭函式中的this

今日頭條:https://m.jb51.net/article/105340.htm 新增連結描述 ES6標準新增了一種新的函式:Arrow Function(箭頭函式)。那麼下面這篇文章主要給大家介紹了箭頭函式中this的相關資料,有需要的朋友可以參考借鑑,下面來一起看看吧。 首先我們先看

Javascript學習---函式繫結bind()

函式繫結 在前面我們已經知道setTimeout()很容易就會丟失this,看下面的例子: let user = { firstName: "John", sayHi() { alert(`Hello, ${this.firstName}!`); } }; setTimeo

Javascript學習---函式內建方法call/apply

Javascript預設為每個函式提供了call()和apply()用來設定函式的上下文物件 call() call()方法的具體語法內容如下: func.call(context, arg1, arg2, ...) 其中context是上下文物件;arg1,arg2,...是函式fun

Javascript學習---函式物件

我們已經知道Javascript裡的值都有對應的型別,函式始終特殊的值,它的型別是物件 name屬性 函式物件包含一些可用的物件,例如name屬性 function sayHi() { alert("Hi"); } alert(sayHi.name); // sayHi 顯然,na

Javascript function prototype and object prototype

Object.setPrototypeOf() Object.setPrototypeOf(object, prototype) could change the prototype of the object directly, but only IE 10 and below d

JavaScript函式的相關操作

下面簡要總結JavaScript中關於函式的相關內容: 1.函式 函式即函式物件。一般有return語句,若無,預設返回undefined。 2.函式建立方式:函式宣告和函式表示式。函式宣告會被前置,無論在指令碼哪個位置,都會提前處理,任何位置處呼叫都可。而函式表示式則相反,能否成功呼叫