memperkenalkan
Artikel ini terutama memperkenalkan beberapa teknik yang digunakan dalam fungsi (Bagian 1). Menggunakan fitur fungsi, Anda dapat menulis banyak kode yang sangat menarik. Artikel ini terutama mencakup: mode panggilan balik, objek konfigurasi, fungsi pengembalian, program distribusi, dan kari.
Fungsi panggilan balik
Dalam JavaScript, ketika fungsi A adalah salah satu parameter fungsi lain B, fungsi A disebut fungsi callback, yaitu A dapat dieksekusi dalam periode fungsi B (keduanya mulai, menengah, dan akhir).
Misalnya, ada fungsi yang menghasilkan node
Salinan kode adalah sebagai berikut:
var complexcomputation = function () { /* menangani secara internal dan mengembalikan simpul* /};
Ada deklarasi fungsi findnodes untuk menemukan semua node dan kemudian menjalankan kode melalui panggilan balik panggilan balik.
Salinan kode adalah sebagai berikut:
var findnodes = function (callback) {
var node = [];
var node = complexcomputation ();
// Jika fungsi panggilan balik tersedia, jalankan
if (typeOf callback === "function") {
callback (node);
}
node.push (node);
Return Node;
};
Mengenai definisi panggilan balik, kita dapat mendefinisikannya terlebih dahulu untuk digunakan:
Salinan kode adalah sebagai berikut:
// Tentukan panggilan balik
var hide = function (node) {
node.style.display = "none";
};
// Temukan node dan sembunyikan semua node
var hiddennodes = findnodes (hide);
Anda juga dapat menggunakan definisi anonim secara langsung saat menelepon, sebagai berikut:
Salinan kode adalah sebagai berikut:
// Gunakan fungsi anonim untuk mendefinisikan panggilan balik
var blocknodes = findnodes (function (node) {
node.style.display = 'block';
});
Yang paling umum digunakan mungkin adalah panggilan ke metode AJAX JQuery. Dengan mendefinisikan panggilan balik pada selesai/gagal, kita dapat memproses lebih lanjut ketika panggilan AJAX berhasil atau gagal. Kode ini adalah sebagai berikut (kode ini didasarkan pada jQuery versi 1.8):
Salinan kode adalah sebagai berikut:
var menuID = $ ("ul.nav"). first (). attr ("id");
var request = $ .Ajax ({
URL: "Script.php",
Ketik: "Posting",
Data: {id: menuID},
DataType: "html"
});
// pemrosesan panggilan balik saat panggilan berhasil
request.done (function (msg) {
$ ("#log"). html (msg);
});
// Pemrosesan panggilan balik saat panggilan gagal
request.fail (function (jqxhr, textstatus) {
peringatan ("Permintaan Gagal:" + TextStatus);
});
Objek konfigurasi
Jika parameter suatu fungsi (atau metode) hanya memiliki satu parameter dan parameter adalah objek literal, kami menyebut pola ini pola objek konfigurasi. Misalnya, kode berikut:
Salinan kode adalah sebagai berikut:
var conf = {
Nama pengguna: "Shichuan",
Pertama: "Chuan",
Terakhir: "Shi"
};
addperson (conf);
Di Addperson, Anda dapat menggunakan nilai conf at will, yang umumnya digunakan untuk pekerjaan inisialisasi. Misalnya, Ajaxsetup di jQuery diimplementasikan dengan cara ini:
Salinan kode adalah sebagai berikut:
// Atur nilai awal terlebih dahulu
$ .AjaxSetup ({
url: "/xmlhttp/",
Global: Salah,
Jenis: "Posting"
});
// lalu telepon lagi
$ .Ajax ({data: mydata});
Selain itu, banyak plug-in jQuery juga memiliki bentuk transmisi parameter ini, tetapi mereka juga tidak dapat ditransmisikan. Ketika mereka tidak lewat, nilai default akan digunakan.
Fungsi pengembalian
Mengembalikan fungsi mengacu pada fungsi baru yang secara fleksibel dibuat berdasarkan kondisi spesifik ketika nilai pengembalian satu fungsi adalah fungsi lain, atau fungsi baru dibuat secara fleksibel sesuai dengan kondisi tertentu. Kode contoh adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var setup = function () {
Console.log (1);
return function () {
Console.log (2);
};
};
// Panggil fungsi pengaturan
var my = setup (); // output 1
ku(); // output 2
// atau Anda juga dapat menyebutnya secara langsung
setup () () ();
Atau Anda dapat menggunakan fitur penutupan untuk merekam nomor penghitung pribadi dalam fungsi pengaturan, dan meningkatkan penghitung dengan setiap panggilan. Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var setup = function () {
var count = 0;
return function () {
return ++ count;
};
};
// Penggunaan
var next = setup ();
Berikutnya(); // Kembalikan 1
Berikutnya(); // Kembalikan 2
Berikutnya(); // Kembalikan 3
Berlaku
Aplikasi parsial di sini sebenarnya untuk memisahkan parameter yang masuk. Terkadang serangkaian operasi mungkin memiliki satu atau beberapa parameter selalu sama. Kemudian kita dapat mendefinisikan fungsi parsial terlebih dahulu dan kemudian menjalankan fungsi ini (parameter berbeda yang tersisa dilewatkan selama eksekusi).
Misalnya, kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var partialany = (function (APS) {
// Fungsi ini adalah hasil dari pelaksanaan ekspresi fungsi Anda sendiri dan ditugaskan ke variabel parsialany
fungsi func (fn) {
var argsorig = aps.call (argumen, 1);
return function () {
var args = [],
argspartial = aps.call (argumen),
i = 0;
// Semua set parameter asli variabel,
// Jika parameter adalah placeholder parsialany._, gunakan nilai yang sesuai dengan parameter fungsi berikutnya
// Jika tidak, gunakan nilai dalam parameter asli
untuk (; i <argsorig.length; i ++) {
args [i] = argsorig [i] === func._
? argspartial.shift ()
: argsorig [i];
}
// Jika ada parameter tambahan, tambahkan ke akhir
return fn.Apply (ini, args.concat (argspartial));
};
}
// untuk pengaturan placeholder
func._ = {};
return func;
}) (Array.prototype.slice);
Cara menggunakannya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
// Tentukan fungsi pemrosesan
fungsi hex (r, g, b) {
return '#' + r + g + b;
}
// Tentukan fungsi parsial, ambil parameter pertama hex sebagai nilai parameter yang tidak berubah ff
var redmax = partialany (hex, 'ff', partialany._, partialany._);
// Metode panggilan fungsi baru Redmax adalah sebagai berikut, dan hanya 2 parameter yang diperlukan:
console.log (redmax ('11 ',' 22 ')); // "#ff1122"
Jika Anda berpikir parsialany._ terlalu panjang, Anda dapat menggunakan __ sebagai gantinya.
Salinan kode adalah sebagai berikut:
var __ = partialany._;
var greenmax = parsialany (hex, __, 'ff');
console.log (greenmax ('33 ',' 44 '));
var bluemax = parsialany (hex, __, __, 'ff');
console.log (bluemax ('55 ',' 66 '));
var magentamax = parsialany (hex, 'ff', __, 'ff');
console.log (magentamax ('77 '));
Dengan cara ini, akan jauh lebih sederhana.
Kari
Currying adalah fitur pemrograman fungsional, mengonversi pemrosesan beberapa parameter menjadi pemrosesan parameter tunggal, mirip dengan panggilan rantai.
Mari kita berikan contoh sederhana fungsi Tambah:
Salinan kode adalah sebagai berikut:
fungsi add (x, y) {
var oldx = x, oldy = y;
if (typeof oldy === "tidak terdefinisi") {// parsial
return function (newy) {
return oldx + newy;
}
}
mengembalikan x + y;
}
Dengan cara ini ada banyak cara untuk menelepon, seperti:
Salinan kode adalah sebagai berikut:
// tes
typeof add (5); // "fungsi"
Tambahkan (3) (4); // 7
// Ini juga mungkin
var add2000 = add (2000);
add2000 (10); // 2010
Selanjutnya, mari kita tentukan fungsi kari yang lebih umum:
Salinan kode adalah sebagai berikut:
// Parameter pertama adalah fungsi yang akan diterapkan, dan parameter kedua adalah jumlah minimum parameter yang akan diteruskan
Function Curry (func, Minargs) {
if (Minargs == tidak terdefinisi) {
Minargs = 1;
}
Function funcwithargsfrozen (FrozenArgs) {
return function () {
// Pemrosesan optimasi, jika tidak ada parameter saat menelepon, kembalikan fungsi itu sendiri
var args = array.prototype.slice.call (argumen);
var newargs = frozenargs.concat (args);
if (newargs.length> = Minargs) {
return func. Apply (ini, newargs);
} kalau tidak {
return funcwithargsfrozen (newargs);
}
};
}
return funcwithargsfrozen ([]);
}
Dengan cara ini, kita dapat mendefinisikan perilaku bisnis kita sesuka hati, seperti mendefinisikan penambahan:
Salinan kode adalah sebagai berikut:
var plus = kari (function () {
var hasil = 0;
untuk (var i = 0; i <arguments.length; ++ i) {
hasil += argumen [i];
}
hasil pengembalian;
}, 2);
Cara menggunakannya nyata dan bervariasi.
Salinan kode adalah sebagai berikut:
Plus (3, 2) // panggilan normal
Plus (3) // Terapkan, kembalikan fungsi (nilai pengembalian adalah nilai parameter 3+)
Plus (3) (2) // Lengkapi Aplikasi (kembali ke 5)
plus () (3) () () (2) // return 5
Plus (3, 2, 4, 5) // dapat menerima beberapa parameter
Plus (3) (2, 3, 5) // Demikian pula
Berikut ini adalah contoh pengurangan
Salinan kode adalah sebagai berikut:
var minus = kari (fungsi (x) {
var hasil = x;
untuk (var i = 1; i <arguments.length; ++ i) {
Hasil -= argumen [i];
}
hasil pengembalian;
}, 2);
Atau jika Anda ingin menukar urutan parameter, Anda dapat mendefinisikannya seperti ini
Salinan kode adalah sebagai berikut:
var flip = kari (fungsi (func) {
kembalikan kari (fungsi (a, b) {
return func (b, a);
}, 2);
});
Meringkaskan
Fungsi dalam JavaScript memiliki banyak fungsi khusus, dan dapat menggunakan penutupan dan argumen karakteristik parameter untuk mengimplementasikan banyak teknik yang berbeda. Pada artikel berikutnya, kami akan terus memperkenalkan teknik menggunakan fungsi untuk inisialisasi.