Rumah > Artikel > hujung hadapan web > Penjelasan terperinci tentang fungsi JavaScript kari
Apa itu kari
Kari ialah proses penukaran yang mengubah fungsi yang menerima berbilang parameter Menjadi fungsi yang menerima satu parameter (Anotasi: parameter pertama fungsi asal Jika parameter lain diperlukan, mengembalikan fungsi baharu yang menerima parameter yang tinggal dan mengembalikan hasilnya.
Idea fungsi Ke Lihua: idea pra-pemprosesan js prinsip menggunakan pelaksanaan fungsi untuk membentuk skop yang tidak dimusnahkan , Simpan semua kandungan yang perlu dipraproses dalam skop ini yang tidak dimusnahkan, dan kembalikan fungsi kecil Mulai sekarang, kami akan melaksanakan fungsi kecil, kami boleh melakukan operasi yang berkaitan pada yang disimpan sebelum ini nilai;
Fungsi kari terutamanya memainkan peranan prapemprosesan; dalam Ini dalam kaedah panggil balik pra-diproses sebagai konteks; > Sekeping kod berikut meniru prinsip pelaksanaan mengikat pada rantai prototaip
Fungsi kari (Kari)
dalam Dalam sains komputer, kari ialah teknik yang mengubah fungsi yang menerima berbilang parameter kepada fungsi yang menerima satu parameter (parameter pertama fungsi asal), dan mengembalikan fungsi baharu yang menerima parameter yang tinggal dan mengembalikan hasil Kari adalah untuk lulus dalam parameter tertentu terlebih dahulu untuk mendapatkan fungsi yang mudah. Tetapi parameter yang diluluskan sebelum ini disimpan dalam penutupan, jadi akan ada beberapa ciri pelik. Contohnya:
/** * bind方法实现原理1 * @param callback [Function] 回调函数 * @param context [Object] 上下文 * @returns {Function} 改变this指向的函数 */ function bind(callback,context) { var outerArg = Array.prototype.slice.call(arguments,2); // 表示取当前作用域中传的参数中除了fn,context以外后面的参数; return function (){ var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数; callback.apply(context,outerArg.concat(innerArg)); } }Contoh:
Di atas ialah penjelasan terperinci tentang fungsi JavaScript currying Untuk kandungan yang lebih berkaitan, sila perhatikan laman web PHP Cina (m.sbmmt.com )!
/** * 模仿在原型链上的bind实现原理(柯理化函数思想) * @param context [Object] 上下文 * @returns {Function} 改变this指向的函数 */ Function.prototype.mybind = function mybind (context) { var _this = this; var outArg = Array.prototype.slice.call(arguments,1); // 兼容情况下 if('bind' in Function.prototype) { return this.bind.apply(this,[context].concat(outArg)); } // 不兼容情况下 return function () { var inArg = Array.prototype.slice.call(arguments,0); inArg.length === 0?inArg[inArg.length]=window.event:null; var arg = outArg.concat(inArg); _this.apply(context,arg); } }