国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

學(xué)習(xí)add(1)(2)(3)

yacheng / 2537人閱讀

摘要:實(shí)現(xiàn)什么是柯里化又稱部分求值,簡(jiǎn)單來(lái)說(shuō)就是只傳遞給函數(shù)一部分參數(shù)來(lái)調(diào)用它,讓它返回一個(gè)函數(shù)去處理剩下的參數(shù)。你可以這樣正規(guī)寫當(dāng)然用柯里化也可以這樣定義一個(gè)函數(shù),接受一個(gè)參數(shù)并返回一個(gè)新的函數(shù)。

實(shí)現(xiàn)add(1)(2)(3) 什么是柯里化(Currying)

又稱部分求值(Partial Evaluation),簡(jiǎn)單來(lái)說(shuō)就是只傳遞給函數(shù)一部分參數(shù)來(lái)調(diào)用它,讓它返回一個(gè)函數(shù)去處理剩下的參數(shù)。

你可以這樣正規(guī)寫

var sum = function (a, b) {
    return a + b;
}

當(dāng)然用柯里化也可以這樣

var sumCurrying = function(a) {
    return function(b) {
        return a + b;
    }
}

var first = sum(1); //function
var second = sum(2); //function

sumCurrying(1)(2); //3
first(3); //4
second(4); //6

定義一個(gè)sumCurrying函數(shù),接受一個(gè)參數(shù)并返回一個(gè)新的函數(shù)。調(diào)用sumCurrying函數(shù)之后,返回的函數(shù)就通過(guò)閉包的方式記住了sumCurrying的第一個(gè)參數(shù)。

但是這里只能接受兩個(gè)參數(shù),如果能接受很多個(gè)參數(shù)怎么辦呢?

柯里化的運(yùn)用
function add () {
    var args = [].slice.call(arguments);

    var fn = function () {
        var arg_fn = [].slice.call(arguments);
        return add.apply(null, args.concat(arg_fn));
    }

    fn.valueOf = function() {
        return args.reduce((a, b) => a + b);
    }
    return fn;
}

我第一次看這個(gè)代碼的時(shí)候我也是納悶,what the fuck??valueOf是什么鬼?它運(yùn)行了嗎?看了原博主的我才明白了原來(lái)valueOf和toString在某些時(shí)候是會(huì)自己調(diào)用的,還牽扯到了類型轉(zhuǎn)換,啊啊啊啊~。

來(lái)看看這個(gè)類型轉(zhuǎn)換的題

2 == [[[2]]] //是真還是假?

解析:

引用類型轉(zhuǎn)換為基本類型(所有的引用類型轉(zhuǎn)換為布爾值都是true)

引用類型轉(zhuǎn)換為字符串

1.優(yōu)先調(diào)用toString方法(如果有),看其返回結(jié)果是否是原始類型,如果是,轉(zhuǎn)化為字符串,返回。
2.否則,調(diào)用valueOf方法(如果有),看其返回結(jié)果是否是原始類型,如果是,轉(zhuǎn)化為字符串,返回。
3.其他報(bào)錯(cuò)。

引用類型轉(zhuǎn)化為數(shù)字

1.優(yōu)先調(diào)用valueOf方法(如果有),看其返回結(jié)果是否是原始類型,如果是,轉(zhuǎn)化為數(shù)字,返回。
2.否則,調(diào)用toString方法(如果有),看其返回結(jié)果是否是原始類型,如果是,轉(zhuǎn)化為數(shù)字,返回。
3.其他報(bào)錯(cuò)。

以下來(lái)自犀牛書:

1,null和undefined,相等。
2,數(shù)字和字符串,轉(zhuǎn)化為數(shù)字再比較。
3,如果有true或false,轉(zhuǎn)換為1或0,再比較。
4,如果有引用類型,優(yōu)先調(diào)用valueOf。
5,其余都不相等。

回到類型轉(zhuǎn)換的這個(gè)題,因?yàn)槭桥c數(shù)字進(jìn)行比較,所以先調(diào)用valueOf(),返回的是本身不是原始類型,然后調(diào)用toString()得到"2",然后變成了字符串和數(shù)字("2" == 2)進(jìn)行比較。

所以結(jié)果為 true

好,回到valueOf和toString被自動(dòng)調(diào)用的問(wèn)題上。

var obj = {name: "Coco"};
var str = "123" + obj; 
console.log(str); //123[object Object]

為什么會(huì)這樣呢?上面的例子實(shí)際上是

var obj = {name: "Coco"};
var str = "123" + obj.toString();

當(dāng)然我們可以改寫toString和valueOf方法

如果只改寫 valueOf() 或是 toString()其中一個(gè),會(huì)優(yōu)先調(diào)用被改寫了的方法,而如果兩個(gè)同時(shí)改寫,則會(huì)像 Number 類型轉(zhuǎn)換規(guī)則一樣,優(yōu)先查詢 valueOf() 方法,在 valueOf() 方法返回的是非原始類型的情況下再查詢 toString() 方法。

var obj = {
    toString: function () {
        console.log("調(diào)用了toString");
        reutrn "1";
    },
    valueOf: function () {
        console.log("調(diào)用了vlaueOf");
        return "100";
    }
}

alert(obj + "1"); 
//調(diào)用了valueOf 
//"1001"

對(duì)于函數(shù)的valueOf來(lái)說(shuō):

function test () {
    var a = 1; 
    console.log(a);
}

test; 
//重新打印了一遍test函數(shù)體,其實(shí)是自行調(diào)用調(diào)用了test.valueOf()
//如果valueOf返回的不是原始類型,那么就會(huì)嘗試去找toString方法。

所以add(1)(2)

首先進(jìn)入add

然后進(jìn)入fn

然后進(jìn)入add

調(diào)用valueOf

3

參考資料:
一道面試題引發(fā)的javascript類型的轉(zhuǎn)換的思考

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86816.html

相關(guān)文章

  • java-list-map-set 學(xué)習(xí)記錄

    摘要:集合類類型解釋的父類集集合中的元素不按特定方式排序,并且沒(méi)有重復(fù)對(duì)象。他的有些實(shí)現(xiàn)類能對(duì)集合中的鍵對(duì)象進(jìn)行排序。 集合類 2017-07-10 22:24:57 blog site https://github.com/Fiz1994 類型解釋: Collection : Set,List 的父類 Set(集):集合中的元素不按特定方式排序,并且沒(méi)有重復(fù)對(duì)象。他的有些實(shí)現(xiàn)類能對(duì)集合中的...

    stackvoid 評(píng)論0 收藏0
  • tensorflow

    當(dāng)談到深度學(xué)習(xí)和人工智能時(shí),TensorFlow是最受歡迎的框架之一。TensorFlow是一個(gè)開源的機(jī)器學(xué)習(xí)框架,由Google開發(fā)和維護(hù)。它允許開發(fā)人員和研究人員使用Python等編程語(yǔ)言來(lái)構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。在本文中,我們將探討TensorFlow的編程技術(shù)。 1. 安裝TensorFlow 首先,您需要安裝TensorFlow。TensorFlow可以通過(guò)pip包管理器輕松安裝。在...

    CompileYouth 評(píng)論0 收藏1271
  • 如何把yolov5里的PANet層改成BiFPN詳析

      如今yolov5的neck用的都是PANet,在efficient文章中給出了BiFPN結(jié)構(gòu),也有更為很不錯(cuò)的特性,接下來(lái)本文關(guān)鍵為大家介紹了對(duì)于如何將yolov5里的PANet層改成BiFPN的資料,需用的小伙伴可以借鑒一下  一、Add  1.在common.py后放入如下所示編碼   #融合BiFPN設(shè)定可學(xué)習(xí)培訓(xùn)主要參數(shù)學(xué)習(xí)培訓(xùn)不一樣支系的權(quán)重值   #2個(gè)支系add實(shí)際操作   cl...

    89542767 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<