DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 淺談JS中的bind方法與函數柯裡化
淺談JS中的bind方法與函數柯裡化
編輯:關於JavaScript     

綁定函數bind()最簡單的用法是創建一個函數,使這個函數不論怎麼調用都有同樣的this值。不同於call和apply只是單純地設置this的值後傳參,它還會將所有傳入bind()方法中的實參(第一個參數之後的參數)與this一起綁定。

關於這個特性看《JS權威指南》原文的例子:

var sum = function(x,y) { return x + y }; 

var succ = sum.bind(null, 1); //讓this指向null,其後的實參也會作為實參傳入被綁定的函數sum

succ(2); // => 3: 可以看到1綁定到了sum函數中的x

其次, bind()方法所返回的函數的length(形參數量)等於原函數的形參數量減去傳入bind()方法中的實參數量(第一個參數以後的所有參數),因為傳入bind中的實參都會綁定到原函數的形參,舉個例子:

function func(a,b,c,d){...} //func的length為4

var after = func.bind(null,1,2); //這裡輸入了兩個實參(1,2)綁定到了func函數的a,b

console.log(after.length); //after的length為2

第三,當bind()所返回的函數用作構造函數的時候, 傳入bind()的this將被忽略,實參會全部傳入原函數,這樣說很抽象,舉個例子:

function original(x){
 this.a = 1;
 this.b = function(){return this.a + x}
}
var obj={
 a = 10
}
var newObj = new(original.bind(obj, 2)); //傳入了一個實參2

console.log(newObj.a); //輸出1, 說明返回的函數用作構造函數時obj(this的值)被忽略了
console.log(newObj.b()); //輸出3 ,說明傳入的實參2傳入了原函數original

以上就是ES5中bind方法的特性, 這種技術也被稱為函數柯裡化。這種技術將多個參數的函數變成只帶一個參數的函數。bind方法就是該技術在js中的實踐。

關於這篇淺談JS中的bind方法與函數柯裡化就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved