理解bind函式

2022-03-07 15:13:50 字數 2060 閱讀 5623

前言:之前一直不懂這個函式是幹嘛的,最近慢慢有點懂了,說一說自己的理解~

本文按以下3個方面來談談bind函式

1)對bind函式的理解;

2)如何使用bind函式

3)自定義bind函式

(中有bind函式較詳細的說明)

語法:

function.bind(thisarg[,arg1[,arg2[,argn]]])

var a=;

functionfoo()

console.log(foo.call(a));//1

console.log(foo.bind(a));//function foo()

觀察以上**發現,call函式實現了在a物件上呼叫foo函式,但bind函式卻返回了foo的主體。那這不是沒起任何作用?

var a=;

functionfoo()

var foo_bind =foo.bind(a);

console.log(foo);//function foo()

console.log(foo_bind);//function foo()

console.log(foo());//undefined

console.log(foo_bind());//1

通過以上**可以發現,雖然通過bind繫結後返回的是foo函式主體,但是有差別的:通過bind繫結後返回的函式執行時已經是在a的環境中執行了(而單獨執行foo是在window中,所以this.x返回undefined)。

那bind函式的這個作用又什麼用呢?它一般用在**函式和事件處理程式中(也就是非同步程式設計中),舉個例子

//bind方法

btn.onclick =foo.bind(a);

//匿名函式方法

btn.onclick = function()

以上兩種方法實現相同的功能,再舉個例子

//bind方法

settimeout(foo.bind(a), 1000);

//匿名函式方法

settimeout(function() , 1000);

通過以上兩個例子可以很清楚的看出,call函式相當於把繫結和執行一次性完成了(匿名函式達到了將其分開的作用),bind函式就是將繫結與執行分開了。

上一部分其實已經講了怎麼使用,這一部分主要是將帶引數是怎麼使用。

規則:繫結函式將bind中指定的引數作為優先引數,在呼叫繫結函式時指定的引數作為輔助引數。啥意思?

var a={};

functionfoo(a,b,c)

var foo_bind = foo.bind(a,"a","b")

foo_bind("x","y","z");//"abx"

var foo_bind2 = foo.bind(a,"a","b","c")

foo_bind2("x","y","z");//"abc"

觀察以上**,發現「a」,"b」作為優先引數轉給了函式foo,而呼叫時傳入的"x","y","z"要接在"a","b"後面(如果還需要就傳,不需要了就不傳了)

通過第一部分的講解,其實自定義bind就很簡單了。

首先,先不考慮傳引數,寫出簡單的自定義bind

var a=;

functionfoo(a,b,c)

functionbind(fn,context)

}var foo_bind=bind(foo,a);

foo_bind("a","b","c");//"abc1"

接下來考慮給bind函式傳引數。

var a=;

functionfoo(a,b,c)

functionbind(fn,context)

}var foo_bind=bind(foo,a,"a");

foo_bind("a","b","c");//"aab1"

到這裡,就算都講完了。這是我自己的理解,希望可以幫到你~

bind()函式 listen()函式

bind 函式 include include int bind int sockfd,const struct sockaddr addr,socklen t addrlen 12 3sockfd是返回socket函式的返回值 addr 傳入引數 struct sockaddr addr addr...

bind函式詳解

前面我們已經說了,套接字也建立了,地方 也定義了,下面就需要將socket放置在這個 地方 tcp 將他們緊緊地 在一起,用bind函式吧,我們來看看函式原型 int pascal far bind socket s,const struct sockaddr far addr,int namele...

bind函式解析

名稱 bind 把名字和套接字相關聯 使用格式 include include intbind int sockfd const struct sockaddr addr socklen t addrlen 功能描述 當用socket 函式建立套接字以後,套接字在命名空間 網路位址族 中存在,但沒有...