1. 程式人生 > >回撥,閉包,return簡單總結

回撥,閉包,return簡單總結

1 回撥函式:一個函式的 函式名 作為另外一個函式的 實參 傳入

2 函式的閉包:一個函式是另外一個函式的返回值

3 函式名代表函式整體,函式名+()代表函式的執行

形參可以傳入的值,形參可以傳入任何型別的值,包括簡單資料型別和複雜資料型別,其中複雜資料型別包括了函式

        function fn (num1,num2,rule){
            return rule(num1,num2);
        }

        function rule1(num1,num2){
            return num1 + num2 ;
        }
        function rule2(num1,num2){
            return num1 - num2 ;
        }
        function rule3(num1,num2){
            return num1 * num2 ;
        }
        function rule4(num1,num2){
            return num1 / num2 ;
        }
        console.log(fn(3,6,rule1));
        console.log(fn(3,6,rule2));
        console.log(fn(3,6,rule3));
        console.log(fn(3,6,rule4));

控制檯輸出:
9
-3
18
0.5

因為在定義函式fn的時候,rule(num1,num2),中 rule 被定義為只能傳入函式,所以只能在 形參rule的位置傳入實參是個函式,而rule函式定義了num1 和 num2 是什麼型別的值

    console.log(fn(null,6,rule1));  6 
    console.log(fn(undefined,6,rule1));  NaN
    console.log(fn(rule1(8,4),rule2(4,2),rule3))   24 
    console.log(fn(rule1(8,4),rule2(4,2),rule3 ,rule4))    24 

多傳進來的值會被忽略

需要注意的是函式名可以被傳入,因為在建立函式的時候,函式名指向了堆記憶體中的地址,傳入該地址,則代表引用該函式。

一旦加了 ( ).就代表呼叫並且執行了該函式

    console.log(fn(3,6,rule1()));

這行程式碼會報錯,因為 rule1() 被直接執行了,此時傳入的是 rule1 () 執行後的返回值,
函式名代表函式整體,函式名+()代表函式的執行小案例解析
(1) 返回函式名

console.log(fn());
function fn(){

    return fn1;

}
function fn1(){
    console.log("這是函式閉包的運用");
}

控制檯輸出:
function fn1(){
console.log(“這是函式閉包的運用”);
}
(2) 返回 函式名+()

console.log(fn());
function fn(){

    return fn1;

}
function fn1(){
    console.log("這是函式閉包的運用");
}

控制檯輸出:
這是函式閉包的運用

4 注意:

A 函式不呼叫則不執行,函式名代表函式整體,可以進行輸出,列印,等操作,也可以作為其他函式的引數傳入

B 函式名+()則代表該函式被執行了,無論其被列印、輸出,或者被其他函式呼叫,或者作為其他函式的返回值,結果都是其執行之後所返回的內容

C 函式名+() 執行之後返回值得內容有以下幾種情況:

a 當函式體內沒有寫 return 的時候,沒有返回值,如果輸出console.log(fn());(fn()代表一個定義過的函式)結果為undefined ;
b 當函式體內寫了 return 之後,後面沒有跟內容,預設返回值是 undefined
c 函式體內寫了 return ,後面也跟了內容,那麼返回後面跟的內容;
d 函式語句執行到 return 之後,後面的語句不會執行。

相關推薦

return簡單總結

1 回撥函式:一個函式的 函式名 作為另外一個函式的 實參 傳入 2 函式的閉包:一個函式是另外一個函式的返回值 3 函式名代表函式整體,函式名+()代表函式的執行 形參可以傳入的值,形參可以傳入任何型別的值,包括簡單資料型別和複雜資料型別,其中複雜

python開發函數進階:命名空間作用域函數的本質內置方法(globales)

問題 總結 加載 自己的 ger 作用域 範圍 沒有 概念 一,命名空間 #局部命名空間#全局命名空間#內置命名空間 #三者的順序#加載順序 硬盤上——內存裏#內置-->全局(從上到下順序加載進來的)-->局部(調用的時候加載) 1 #!/usr/bin/

函數名裝飾器

span play 分享 技術 splay 容器類 函數的參數 spl pri #輸出的__closure__有cell元素 :是閉包函數 def func(): name = ‘eva‘ def inner(): print(name)

python之路——函數名的應用叠代器

glob 協議 字符串 () closure nco 異常處理 類類型 單向 # ##函數名的應用# def func():# print(666)# func()## 1.函數名就是函數的內存地址# print(func) #結果<functio

day011 函式名的運用迭代器

主要內容: 1.函式名的使用以及第一類物件 2.閉包 3.迭代器一、函式名的運用 函式名就是變數名,命名規則與變數名一樣。 函式名儲存的是函式的記憶體地址。 1、檢視函式名的記憶體地址 """python def inf(): print("疏影"

函式程式設計(名稱空間裝飾器

一、名稱空間 名稱空間 namespace  存放名字的地方 x=1 名稱空間存放 x 和 x與1繫結關係 類似{x:id(1)} 1.1.名稱空間分三種:  1.locals 是函式內的名稱空間,包括區域性變數和形參 locals()   2.globals

[Swift4] Swift筆記 2.0(函式2列舉結構體)

函式,閉包,列舉,結構體 函式多值返回 // 利用 元組 返回多個值 // 利用 陣列 輸入多個值 func calcMaxmain( values :[Int])-> (max :

python-第一類物件迭代器

# def fn(): # print("我叫fn") # fn() # print(fn) # <function fn at 0x0000000001D12E18> # fn() # gn = fn # 函式名可以進行賦值 # print(gn) # gn() # fn =

(十一)函式名的使用迭代器

⼀. 函式名的運用.      函式名是⼀個變數, 但它是⼀個特殊的變數, 與括號配合可以執⾏函式的變數.     1.函式名的記憶體地址 def func(): print("呵呵") print(func) 結果: <funct

函式補(遞迴巢狀)

變數作用域 - Python中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在哪裡賦值的 - Python作用於一共有四種 - L(local)區域性作用域,在函式,類等內部可見 - E(enclosing)閉包函式外的函式中 - G

day 10 函式名的運用迭代器

函式名的本質 函式名本質上就是函式的記憶體地址 函式名的五種運用:  1、函式名是一個變數 def func(): print(666) print(func) # 函式的記憶體地址 <function func at 0x000002B6D2559AE8> 2、

python作用域裝飾器

""" 瞭解裝飾器之前,學習路線 python函式的作用域 python的閉包 裝飾器 """ python函式的作用域 LEGB L:local函式內部作用域 #函式內部的 E:enclosing 函式內部與內嵌函式之間 #函式外面還有一層函式,外層函式的變數 G:global

函式表示式遞迴作用域作用域鏈與變數

函式表示式 函式表示式是JavaScript中的一個既強大又容易令人困惑的特性。定義函式的方式有兩種:一種是函式宣告(沒錯,不同於C語言之類的),另一種就是函式表示式。 函式申明(這相當於C語言的函式定義)的語法是這樣的: function functionName(a

調函數參數問題解決方案示例

length fun spa nts .get tel col onclick clas 1.function init4() { 2. var pAry = document.getElementsByTagName("p"); 3. fo

C++一樣很簡單

exe pytho names 對象 reset bsp ini opera ruby 引用百度上對閉包的定義:閉包是指可以包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內或者任何全局上下文中定義的,而是在定義代碼塊的環境中定義(局部變量)。&ldquo

介面用最簡單的一個匿名內部類來講解(附介面高階應用場景讓你對介面的瞭解登堂入室)

介面回撥,是Java開發者必須要學的一個東西,可是他呢,書上沒有,大神部落格裡也沒有,所以導致了有部分小夥紙並不瞭解這個知識,所以這裡做一個最簡單的講解。 (先不牽扯什麼非同步回撥、同步回撥) 首先,只需要記住一點,介面回撥的含義就是把程式碼換個地方寫。 正常我們是這

swift3.0 如何優雅的自定義tableViewcell簡單的自定義cell事件傳遞程式碼封裝。

一:最近在自學swift3.0,故而把OC中最簡單自定義cell的方法,照搬到swift試試。 下面說下設計思想。  1.設計原理,提供介面。下面貼上控制器的程式碼 func tableView(_ tableView: UITableView, cellForRow

精讀JavaScript模式(五)函數的調、與重寫模式

返回 早期 如果 str 表示 info 圖片 mem c函數 一、前言 今天地鐵上,看到很多拖著行李箱的路人,想回家了。 在上篇博客結尾,記錄到了函數的幾種創建方式,簡單說了下創建差異,以及不同瀏覽器對於name屬性的支持,這篇博客將從第四章函數的回調模式說起。我想了

jq外掛的機制$.extend()和$.fn.extend()的區別及的相關簡單案例

<body> <p>1111</p> <ul> <li style="margin: 10px 0">蘋果</li> <li sty

go語言筆記——append是內置的函數!!!new是一個函數!!!調試可以使用本質上是print調試尼瑪!

... -c map blob 名稱 ebo bsp 處理機制 它的 內置函數 Go 語言擁有一些不需要進行導入操作就可以使用的內置函數。它們有時可以針對不同的類型進行操作,例如:len、cap 和 append,或必須用於系統級的操作,例如:panic。因此,它們需要直接