Rumah hujung hadapan web tutorial js Contoh pengaturcaraan fungsi JavaScript kemahiran analisis_javascript

Contoh pengaturcaraan fungsi JavaScript kemahiran analisis_javascript

May 16, 2016 pm 04:02 PM
javascript pengaturcaraan berfungsi

Contoh dalam artikel ini menerangkan pengaturcaraan berfungsi javascript. Kongsikan dengan semua orang untuk rujukan anda. Analisis khusus adalah seperti berikut:

JS, seperti bahasa dinamik lain, boleh menulis fungsi tertib tinggi Apa yang dipanggil fungsi tertib tinggi ialah fungsi yang boleh mengendalikan fungsi. Kerana dalam js fungsi adalah objek lengkap dan tergolong dalam kelas pertama warganegara, yang menyediakan prasyarat untuk pengaturcaraan berfungsi.

Berikut ialah contoh kod daripada tutorial js Fungsinya adalah untuk mengira purata dan sisihan piawai elemen tatasusunan Mula-mula, mari kita senaraikan cara menulis pengaturcaraan tidak berfungsi:

var data = [1,1,3,5,5];
var total = 0;
for(var i = 0;i < data.length;i++)
  total += data[i];
var mean = tatal/data.length; //平均数为3
//计算标准差
total = 0;
for(var i = 0;i < data.length;i++){
  var deviation = data[i] - mean;
  tatal += deviation * deviation;
  }
var stddev = Math,.sqrt(total/(data.length-1));//标准差为2
Salin selepas log masuk

Untuk menggunakan pengaturcaraan berfungsi, kami mentakrifkan beberapa fungsi pembantu:

//将类数组对象转换为真正的数组
function array(a,n){
 return Array.prototype.slice.call(a,n||0);
}
//将函数实参传递至左侧
function partial_left(f){
 var args = arguments;
 return function(){
  var a = array(args,1);
  a = a.concat(array(arguments));
  return f.apply(this,a);
 };
}
//将函数的实参传递至右侧
function partial_right(f){
 var args = arguments;
 return function(){
  var a = array(arguments);
  a = a.concat(array(args,1));
  return f.apply(this,a);
 };
}
//该函数实参被用做模版,
//实参列表中的undefined值会被实际实参值填充。
function partial(f){
 var args = arguments;
 return function(){
  var a = array(args,1);
  var i = 0,j = 0;
  for(;i<a.length;i++)
   if(a[i] === undefined)
    a[i] = arguments[j++];
  a = a.concat(array(arguments,j));
  return f.apply(this,a);
 };
}
//返回一个函数类似于f(g())
function compose(f,g){
 return function(){
  return f.call(this,g.apply(this,arguments));
 };
}
Salin selepas log masuk

Di bawah kami memberikan kod js sepenuhnya menggunakan pengaturcaraan berfungsi:

var data = [1,1,3,5,5];
var sum = function(x,y){return x+y;};
var product = function(x,y){return x*y;};
var neg = partial(product,-1);
var square = partial(Math.pow,undefined,2);
var sqrt = partial(Math.pow,undefined,0.5);
var reciprocal = partial(Math.pow,undefined,-1);
//好吧,高潮来鸟 :)
var mean = product(reduce(data,sum),reciprocal(data.length));
var stddev = sqrt(product(reduce(map(data,compose(square,partial(sum,neg(mean)))),sum),reciprocal(sum(data.length,-1))));
Salin selepas log masuk

Kecuali untuk fungsi pengurangan dan peta, fungsi lain diberikan di atas. Fungsi pengurangan adalah serupa dengan fungsi suntikan dalam ruby:

ary = (1..10).to_a
ary.inject(0) {|sum,i|sum + i} //结果为55
Salin selepas log masuk

js ditulis seperti berikut:

var ary = [1,2,3,4,5,6,7,8,9,10]
ary.reduce(function(sum,i){
 return sum + i;
},0);
Salin selepas log masuk

0 ialah nilai awal jumlah Jika diabaikan, jumlah ialah nilai elemen pertama tatasusunan Ia boleh diabaikan di sini.

Fungsi peta juga sangat mudah. ​​Ia serupa dengan operasi pada setiap elemen tatasusunan dan kemudian mengembalikan tatasusunan selepas operasi Ambil kod js adalah serupa dengan ini:

a = (1..3).to_a; #数组[1,2,3]
a.map {|x| x*2} #返回新数组[2,4,6]
Salin selepas log masuk

Mari kita analisa rentetan kod yang panjang itu:)

jumlah dan produk mentakrifkan fungsi untuk menambah dan mendarab unsur

neg juga merupakan fungsi yang setara dengan: produk(-1,x), yang bermaksud nilai x negatif;

Fungsi segi empat sama adalah bersamaan dengan: Math.pow(x,2), yang mengira nilai kuasa dua bagi x Ambil perhatian bahawa parameter kedua separa di sini tidak ditentukan, yang bermaksud bahawa parameter formal di sini akan digantikan dengan parameter sebenar pertama.

Fungsi sqrt adalah serupa dengan kuasa dua, dan fungsinya bersamaan dengan: Math.pow(x,0.5), yang bersamaan dengan mengira punca kuasa dua bagi x.

Salingan fungsi terakhir tidak sukar Ia bersamaan dengan: Math.pow(x,-1), iaitu, mengira kuasa negatif x, yang bersamaan dengan mengira salingan x.

Berikut ialah cara untuk menggabungkan fungsi di atas bersama-sama :)

Mari kita lihat pengiraan purata dahulu Ia sangat mudah: mula-mula hitung jumlah elemen tatasusunan dan kemudian darabkannya dengan salingan panjang tatasusunan, iaitu jumlah tatasusunan/panjang tatasusunan.

Akhir sekali, melihat sisihan piawai yang kelihatan sukar, lebih baik kita melihat dari dalam ke luar:

Mula-mula lihat lapisan yang mengandungi neg:

//等价于函数sum(-1 * mean + x)
partial(sum,neg(mean)
Salin selepas log masuk
Lihat fungsi karang di bawah:

//下面在源代码上做了等价替换,可以再次等价于:
//square(sum(-1*mean + x)),再次展开(我剥,我剥,我剥洋葱...):
//Math.pow(sum(-1*mean + x),2);
compose(square,sum(-1*mean + x))
Salin selepas log masuk
Mari lihat fungsi peta:

//Ia sangat jelas! ? Iaitu, setiap elemen dalam data adalah purata dan kemudian naikkan hasilnya kepada kuasa 2.

map(data,Math.pow(sum(-1*mean + x),2))
Salin selepas log masuk
Kemudian lihat fungsi pengurangan di luar peta:

//将前面新数组的每个元素值加起来。
reduce(map(...),sum)
Salin selepas log masuk
Kemudian lihat pada fungsi timbal balik:

//等价于求(data.length-1)的倒数
reciprocal(sum(data.length,-1))
Salin selepas log masuk
Lihat fungsi produk luar:

//等价于新数组元素的和除以(data.length-1)
product(reduce(...),reciprocal(...))
Salin selepas log masuk
Sqrt paling luar bermakna mencari punca kuasa dua hasil pembahagian di atas; anda boleh membandingkannya dengan kod pengaturcaraan tidak berfungsi sebelumnya, ia adalah sama :) menakutkan, tetapi sukar selepas analisis Ia akan mencapai sifar serta-merta. Jika anda, pembaca, mengatakan anda masih tidak memahaminya pada akhirnya, ini sepenuhnya soal keupayaan ekspresi bahasa kucing saya, dan anda dialu-alukan untuk bertanya soalan.

Penjelasan telah berakhir, perjuangan telah berakhir, dan anda telah selesai.

Saya harap artikel ini akan membantu reka bentuk pengaturcaraan JavaScript semua orang.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Ungkapan Python Lambda: disingkatkan, ringkas, berkuasa Ungkapan Python Lambda: disingkatkan, ringkas, berkuasa Feb 19, 2024 pm 08:10 PM

ungkapan pythonLambda ialah alat yang berkuasa dan fleksibel untuk mencipta kod yang ringkas, boleh dibaca dan mudah digunakan. Ia bagus untuk mencipta fungsi tanpa nama dengan cepat yang boleh dihantar sebagai hujah kepada fungsi lain atau disimpan dalam pembolehubah. Sintaks asas ungkapan Lambda adalah seperti berikut: lambdaarguments:expression Contohnya, ungkapan Lambda berikut menambah dua nombor: lambdax,y:x+y Ungkapan Lambda ini boleh dihantar ke fungsi lain sebagai argumen seperti berikut: defsum( x ,y):returnx+yresult=sum(lambdax,y:x+y,1,2)Dalam contoh ini

Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Jan 05, 2024 pm 01:37 PM

Pengenalan kepada kaedah mendapatkan kod status HTTP dalam JavaScript: Dalam pembangunan bahagian hadapan, kita selalunya perlu berurusan dengan interaksi dengan antara muka bahagian belakang, dan kod status HTTP adalah bahagian yang sangat penting daripadanya. Memahami dan mendapatkan kod status HTTP membantu kami mengendalikan data yang dikembalikan oleh antara muka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan memberikan contoh kod khusus. 1. Apakah kod status HTTP bermakna kod status HTTP apabila penyemak imbas memulakan permintaan kepada pelayan, perkhidmatan tersebut

Apakah faedah menggunakan ungkapan lambda C++ untuk pengaturcaraan berfungsi? Apakah faedah menggunakan ungkapan lambda C++ untuk pengaturcaraan berfungsi? Apr 17, 2024 am 10:18 AM

Ekspresi lambda C++ membawa kelebihan kepada pengaturcaraan berfungsi, termasuk: Kesederhanaan: Fungsi sebaris tanpa nama meningkatkan kebolehbacaan kod. Penggunaan semula kod: Ungkapan Lambda boleh dihantar atau disimpan untuk memudahkan penggunaan semula kod. Enkapsulasi: Menyediakan cara untuk merangkum sekeping kod tanpa mencipta fungsi berasingan. Kes praktikal: menapis nombor ganjil dalam senarai. Kira jumlah unsur dalam senarai. Ekspresi Lambda mencapai kesederhanaan, kebolehgunaan semula dan enkapsulasi pengaturcaraan berfungsi.

Kesilapan dan perangkap biasa pengaturcaraan berfungsi golang Kesilapan dan perangkap biasa pengaturcaraan berfungsi golang Apr 30, 2024 pm 12:36 PM

Terdapat lima kesilapan dan perangkap biasa yang perlu diberi perhatian apabila menggunakan pengaturcaraan berfungsi dalam Go: Elakkan pengubahsuaian rujukan secara tidak sengaja dan pastikan pembolehubah yang baru dicipta dikembalikan. Untuk menyelesaikan isu konkurensi, gunakan mekanisme penyegerakan atau elakkan daripada menangkap keadaan boleh ubah luaran. Gunakan kefungsian separa dengan berhati-hati untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Sentiasa mengendalikan ralat dalam fungsi untuk memastikan keteguhan aplikasi anda. Pertimbangkan kesan prestasi dan optimumkan kod anda menggunakan fungsi sebaris, struktur data yang diratakan dan kumpulan operasi.

Apakah kelebihan dan kekurangan fungsi Java berbanding bahasa pengaturcaraan berfungsi yang lain? Apakah kelebihan dan kekurangan fungsi Java berbanding bahasa pengaturcaraan berfungsi yang lain? Apr 24, 2024 pm 02:51 PM

Kelebihan pengaturcaraan fungsi Java termasuk kesederhanaan, kebolehkomposisian, konkurensi, kemesraan ujian dan prestasi. Kelemahan termasuk keluk pembelajaran, kesukaran dalam penyahpepijatan, fleksibiliti terhad dan overhed prestasi. Ciri utamanya termasuk fungsi tulen tanpa kesan sampingan, saluran paip pemprosesan data, kod tanpa kewarganegaraan dan API penstriman yang cekap.

Ekspresi Python Lambda: Mendedahkan kuasa fungsi tanpa nama Ekspresi Python Lambda: Mendedahkan kuasa fungsi tanpa nama Feb 24, 2024 am 09:01 AM

Ungkapan Lambda dalam python ialah satu lagi bentuk sintaks bagi fungsi tanpa nama. Ia adalah fungsi kecil tanpa nama yang boleh ditakrifkan di mana-mana dalam program. Ungkapan lambda terdiri daripada senarai parameter dan ungkapan, yang boleh berupa sebarang ungkapan Python yang sah. Sintaks ungkapan Lambda adalah seperti berikut: lambdaargument_list:expression Sebagai contoh, ungkapan Lambda berikut mengembalikan jumlah dua nombor: lambdax,y:x+y ini boleh dihantar ke fungsi lain, seperti peta () fungsi: nombor=[ 1,2,3,4,5]hasil=peta(lambda

Bagaimana untuk mengoptimumkan program berfungsi Golang menggunakan penilaian malas? Bagaimana untuk mengoptimumkan program berfungsi Golang menggunakan penilaian malas? Apr 16, 2024 am 09:33 AM

Penilaian malas boleh dilaksanakan dalam Go dengan menggunakan struktur data malas: mencipta jenis pembalut yang merangkum nilai sebenar dan hanya menilainya apabila diperlukan. Optimumkan pengiraan jujukan Fibonacci dalam program berfungsi, menangguhkan pengiraan nilai perantaraan sehingga benar-benar diperlukan. Ini boleh menghapuskan overhed yang tidak perlu dan meningkatkan prestasi program berfungsi.

See all articles