Rumah > Soal Jawab > teks badan
let fn = (a, b, c) => {
console.log(a, b, c)
}
fn1(0, 0, 0) // output: 0 0 0
Saya mahu parameter kedua fn sentiasa dinaikkan 2 setiap kali ia dipanggil
Itu
fn(0, 0, 0) // output: 0 2 0
fn(1, 1, 1) // output: 1 3 1
Pada masa ini saya hanya boleh mencari cara yang sangat jelek untuk menulis rampasan:
fn = (_ => {
const innerFn = fn
const newFn = (a, b, c) => {
innerFn(a, b + 2, c)
}
Object.assign(newFn, innerFn)
return newFn
})()
Adakah kaedah pembungkusan yang lebih baik?
淡淡烟草味2017-05-16 13:32:03
Caranya betul, tapi saya selalu rasa tulisan awak agak janggal... Saya rasa lebih baik lebih direct...
// 原函数
function fn(a, b, c) {
console.log(a, b, c)
}
// 加工函数
const addTwo = (fn) =>
(a, b, c) =>
fn(a, b + 2, c);
// 生成新函数
const newFn = addTwo(fn);
newFn(0, 0, 0); //0 2 0
为情所困2017-05-16 13:32:03
Saya mahu fn sentiasa menambah 2 pada parameter kedua setiap kali ia dipanggil
Malah, ia tidak lebih daripada menambah 0, 2, 0 pada parameter masing-masing
Maksudnya, satu lagi 偏函数
fnOffset
把 [0, 2, 0] 这三个参数 分别加到 fn(a, b, c) 上的 a b c 上
更广义的说:
把 [ .... ]
这 n
个参数 分别加到 fn()
的 arguments
的对应位置上
function fn(a, b, c){
console.log(a, b, c);
}
function adder(arr, fn, _this){
_this = _this || window;
var toAdd = arr.slice(0, fn.length);
return function(){
var argu = Array.prototype.slice.call(arguments);
fn.apply(_this, toAdd.map((item, idx) => {
return argu[idx] + item;
}));
}
}
var fnOffset = adder([0, 2, 0], fn);
fnOffset(0, 0, 0);
fnOffset(2, 1, 0);
用 fn020
n
[ .... ]
pada argumen
yang sepadan dengan fn()
Lokasi 🎜
rrreee
🎜🎜
🎜🎜
🎜Menggunakan fn020
sebagai nama ubah seharusnya lebih elegan = =🎜ringa_lee2017-05-16 13:32:03
Apa yang anda huraikan adalah sedikit seperti Proksi ES6, tetapi ini tidak boleh diisi poli dan mungkin tidak sesuai untuk digunakan pada bahagian hadapan.