Tambahkan properti ke fungsi javascript

Dalam JavaScript, fungsi disebut Objek Fungsi karena merupakan objek. Sama seperti objek, fungsi memiliki properti dan metode, mereka dapat disimpan dalam variabel atau larik, dan diteruskan sebagai argumen ke fungsi lain.

Fungsi adalah Objek Kelas Satu

Seperti disebutkan, fungsi adalah objek. Anda dapat bekerja dengan fungsi seolah-olah itu adalah objek. Misalnya, Anda dapat menetapkan fungsi ke variabel, ke elemen array, dan ke objek lain. Mereka juga dapat diedarkan sebagai argumen ke fungsi lain atau dikembalikan dari fungsi tersebut. Satu-satunya perbedaan dengan objek adalah bahwa fungsi dapat dipanggil

Mari kita jalankan tes kecil dan konfirmasikan bahwa suatu fungsi memang merupakan instance objek

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _Lari

Kita melihat bahwa suatu fungsi memang merupakan objek. Fungsi JavaScript adalah jenis objek khusus, yang disebut objek fungsi. Objek fungsi menyertakan string yang menyimpan kode aktual -- badan fungsi -- dari fungsi tersebut. Kode ini secara harfiah hanyalah sebuah string. Meskipun tidak disarankan, Anda dapat membuat objek fungsi baru dengan meneruskan string kode ke konstruktor Fungsi bawaan, seperti itu

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398..

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. Jalankan

Anda juga dapat membuat fungsi baru dengan fungsi konstruktor khusus (ingat bahwa menurut konvensi, fungsi konstruktor selalu dimulai dengan huruf besar). Pada kode di bawah ini kita memiliki fungsi konstruktor var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. _8 yang digunakan untuk membuat instance buku. Dalam fungsi konstruktor, kami menugaskan objek fungsi ke properti var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 9

function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _

function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King Lari

Konstruktor var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. _8 menerima argumen yang diberikan ke properti bernama function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 1. Setelah objek dibuat, Anda dapat menetapkan nilai properti dan memanggil metode seperti objek lainnya

Objek fungsi juga dapat dibuat sebagai bagian dari literal objek. Di bawah ini kita membuat objek bernama function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _2 dengan properti bernama function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 3 yang merupakan fungsi objek

var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function

var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function Jalankan

Selanjutnya, mari kita lihat contoh di mana objek fungsi diedarkan seperti objek biasa. Fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 4 mengambil fungsi sebagai argumennya. Fungsi baru dikembalikan dari panggilan function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _4 yang memanggil fungsi yang diteruskan dan mengembalikan negasi logis dari nilai pengembaliannya

Mengikuti deklarasi fungsi, kami meneruskan fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 6 bawaan ke function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 4 dan menetapkan fungsi yang dikembalikan ke variabel function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 8. Variabel function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _8 adalah objek fungsi yang dapat diteruskan seperti objek apa pun. Untuk menjalankan fungsi, Anda memanggilnya dengan parameter berbeda

function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false

function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false Jalankan

Berikut adalah contoh lain menggunakan fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _4 yang sama. Kami menambahkan fungsi khusus untuk menguji apakah suatu bilangan prima atau bukan (bilangan bukan prima disebut komposit). Fungsi ini diteruskan ke fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _4 sebagai argumen

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _0

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 1Lari

Catatan. metode function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 2 bawaan menguji apakah semua elemen dalam larik lulus uji yang diterapkan oleh fungsi yang diteruskan sebagai argumen;

Fungsi Disalin oleh Referensi

Saat Anda menetapkan objek fungsi ke variabel lain, JavaScript tidak membuat salinan baru dari fungsi tersebut. Sebaliknya itu membuat referensi variabel baru objek fungsi yang sama seperti aslinya. Hanya saja dua variabel yang memiliki nama berbeda mengakses objek fungsi dasar yang sama

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _2

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _3Lari

Contoh ini menunjukkan bahwa jika kita menambahkan properti ke objek fungsi, maka kedua variabel, function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 4 dan function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 5, akan diubah karena mereferensikan objek fungsi yang sama. Ini menegaskan bahwa objek fungsi memang disalin dengan referensi

Kami baru mengetahui bahwa objek fungsi disalin dengan referensi. Namun, saat memodifikasi badan fungsi yang sebenarnya, hal-hal sedikit berbeda karena ini akan menyebabkan objek fungsi baru dibuat. Pada contoh berikutnya badan fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _4 diubah dan JavaScript akan membuat objek fungsi baru

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _4

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 5Lari

Menetapkan badan fungsi baru ke function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 4 akan membuat objek fungsi baru. Perhatikan bahwa variabel function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King _5 masih mereferensikan objek fungsi lama

Melewati fungsi sebagai Callback

Sama seperti objek biasa, Anda dapat meneruskan objek fungsi ke fungsi lain (sebenarnya Anda sudah melihat ini beraksi dengan contoh fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 4)

Dalam contoh berikutnya, dua fungsi berbeda, var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 0 dan var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 1, diteruskan sebagai parameter ke fungsi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 2. Tentu saja, hanya referensi ke fungsi yang diteruskan. Fungsi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 0 dan var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 1 disebut callback atau lebih tepatnya fungsi callback. Fungsi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _2 akan memanggilnya kembali (mis. e. memanggilnya) dengan dua nilai argumen yang disediakan

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _6

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _7Lari

Fungsi panggilan balik memainkan peran penting dalam banyak kerangka kerja, termasuk JQuery. Pertimbangkan kode di bawah ini. Pesan var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _6 dijalankan dengan baik sebelum animasi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 7 selesai, yang mungkin bukan yang Anda inginkan

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 8Jalankan  Reset

Hal ini dapat diatasi dengan meneruskan fungsi panggilan balik yang hanya akan dijalankan saat animasi selesai

function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _9Jalankan  Reset

Jadi, alih-alih menunggu fungsi selesai, Anda dapat menggunakan callback untuk menjalankannya secara asinkron. Ini bermanfaat untuk tugas yang membutuhkan waktu untuk diselesaikan, seperti animasi sembunyikan di atas. Contoh lainnya adalah saat menjalankan operasi AJAX dan Anda tidak ingin pengguna menunggu panggilan kembali. Ini memungkinkan browser untuk terus merespons permintaan pengguna sambil menunggu fungsi callback dipanggil

Pemrograman asinkron adalah keterampilan penting yang harus dimiliki saat bekerja dengan JavaScript. Untuk mempelajari lebih lanjut tentang callback dan loop peristiwa penting, kami sarankan Anda memeriksa JS Dofactory kami yang unik di mana kami menjelajahi ini dan topik lainnya dengan lebih detail. Klik di sini untuk detail lebih lanjut

Dalam situasi di mana suatu fungsi dipanggil berulang kali dengan sebagian besar argumen yang sama, Anda mungkin memiliki kandidat untuk kari. Untuk mencari fungsi pada dasarnya adalah menyimpan dan menggunakan kembali nilai argumen

Fungsi kari menggunakan penutupan untuk meng-cache status argumen berulang sehingga Anda tidak perlu meneruskannya setiap saat. Fungsi baru kemudian menggunakannya untuk mempopulasikan seluruh daftar argumen yang diperlukan oleh fungsi aslinya

Input untuk proses currying adalah fungsi yang menerima dua atau lebih argumen. Itu kemudian mengubah fungsi untuk menghasilkan fungsi baru yang menawarkan fungsionalitas serupa tetapi dengan argumen parsial (lebih sedikit dari yang asli). Itu mengikat sisa argumen ke nilai tetap

Mari kita lihat sebuah contoh. Fungsi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _8 menerima dua argumen untuk nama depan dan nama belakang. var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 9 dan var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 0. Itu menggabungkan mereka untuk menghasilkan nama orang tersebut

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 0

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 1Lari

Selanjutnya, kami membuat versi kari dari fungsi yang sama. Jika kita memberikan dua argumen, maka akan dieksekusi secara normal, seperti contoh di atas. Namun, jika kita hanya meneruskan argumen var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _9, maka fungsi lain dikembalikan dengan penutupannya yang menyimpan nilai var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 9. Fungsi yang dikembalikan menerima sebagian daftar argumen, dalam contoh kita, hanya satu argumen yaitu var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 0 karena sudah mengetahui nilai var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 9. Sekali lagi, ia melakukan pekerjaan yang sama seperti var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _8, tetapi nilai var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 9 diingat dalam penutupan terkait dengan fungsi pembantu anonim yang dikembalikan

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 2

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 3Lari

Dalam JavaScript, suatu fungsi membutuhkan fungsi pembantu untuk mencapai kari. Fungsi pembantu ini biasa disebut dengan fungsi kari

Ada implementasi generik dari currying yang dapat diterapkan ke fungsi apa pun dan kode di bawah ini menunjukkannya. Itu menciptakan penutupan yang menyimpan fungsi asli dan argumen untuk kari. Kemudian, saat dipanggil lagi, ia menggabungkan argumen yang masuk dengan array argumen sebelumnya dan menjalankan fungsi aslinya. Satu larik menyimpan argumen yang diteruskan ke pemanggilan saat ini dan larik lainnya menyimpan argumen yang diteruskan ke fungsi curry. Array gabungan kemudian diteruskan ke fungsi aslinya

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. _4

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 5Lari

Semua fungsi JavaScript memiliki metode yang disebut var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _7 yang mengikat objek dan mengembalikan fungsi baru. Argumen pertama untuk mengikat menetapkan var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 8 konteks fungsi

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 6

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 7Lari

Memanggil var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 9 memanggil fungsi asli function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 3 sebagai metode function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 1, seperti function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 2. Argumen yang Anda teruskan ke function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false _3 diteruskan sebagai argumen function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 4 ke fungsi function Book(type, author) { this.type = type; this.author = author; this.getDetails = function () { return this.type + " written by " + this.author; } } var book = new Book("Fiction", "Peter King"); console.log(book.getDetails()); // => Fiction written by Peter King 3

Selain mengikat fungsi ke objek, EcmaScript 5 mendukung metode var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 7 yang membawa kari asli ke JavaScript. Anda tidak perlu lagi menggunakan fungsi pembantu kari. Jumlah arbitrer argumen yang Anda teruskan ke var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 7 juga terikat

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. _8

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 9Lari

Ini menciptakan fungsi baru yang disebut ________20______8. Nilai var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _8 terikat ke null, i. e. objek global, dan function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false _0 dan function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 1 argumen terikat masing-masing ke 1 dan 2. Memanggil function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 8 dengan nilai argumen 3 mengikat nilai ini ke function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 0 dan kemudian menjalankan fungsi var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 0 tanpa perlu menulis fungsi kari

Selanjutnya, mari kita lihat aplikasi praktis dari kari dalam bidang konversi satuan

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 0

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 1Jalankan

Fungsi function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false _5 melakukan perhitungan konversi satuan yang sebenarnya. Lihatlah var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function _7 dan, sekali lagi, argumen nol mengacu pada objek global yang akan digunakan sebagai var circle = { radius: 10, area: function () { return Math.PI * this.radius * this.radius; } }; console.log(circle.area()); // => 314.15.. console.log(typeof circle.area); // => function 8. Tiga argumen berikutnya masing-masing terikat pada function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false _8, function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 9, dan function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 00. Pengikatan ini disimpan dan dipelihara dalam penutupan yang terkait dengan objek fungsi function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 01 dan function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 02. Dalam dua baris terakhir kita memanggil setiap fungsi dengan nilai yang kemudian terikat ke variabel function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true 03 dan fungsi function negate(f) { return function (i) { return !f(i); }; } var isNumber = negate(isNaN); // function object console.log(isNumber(5)); // => true console.log(isNumber(NaN)); // => false console.log(isNumber("A")); // => false 5 asli disebut mengembalikan hasil yang diinginkan

Misalkan Anda sedang membuat game balap mobil dalam JavaScript dan Anda perlu melacak jumlah objek mobil yang telah dibuat instance-nya. Di Java, Anda akan menggunakan kata kunci statis untuk ini, tetapi JavaScript tidak menawarkan fungsionalitas seperti itu di luar kotak

Tentu saja, Anda cukup menyimpan data ini dalam variabel global tetapi ini akan menambah variabel yang tidak diperlukan ke namespace global. Solusi yang lebih baik adalah menyimpan informasi ini di properti objek fungsi. Mari kita panggil fungsi function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _05 dan gunakan untuk mengingat nilai selanjutnya yang akan dikembalikan. Maka fungsi akan dapat mengembalikan nilai yang berbeda setiap kali dipanggil

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 2

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 3Lari

Dalam pemrograman fungsional, menyimpan hasil pemanggilan fungsi disebut sebagai memoisasi. Mari jelajahi ini dengan sedikit lebih detail

Memoisasi adalah teknik pengoptimalan yang digunakan untuk meningkatkan kinerja suatu fungsi dengan menyimpan nilai pengembaliannya sehingga fungsi tersebut tidak perlu mengulang perhitungan yang berpotensi berat saat dipanggil lagi

Tidak semua fungsi dapat di-memo; . Fungsi transparan referensial adalah fungsi yang selalu menghasilkan output yang sama pada input yang diberikan. Misalnya, jika Anda memanggil fungsi dengan nilai x yang diteruskan ke fungsi tersebut, fungsi tersebut akan melakukan perhitungan pada x dan selalu mengembalikan nilai y terkait yang sama

Contoh bagus di mana memoisasi dapat bermanfaat adalah animasi Kanvas HTML5 dan perhitungan matematis rekursif, seperti perhitungan faktorial, menghasilkan urutan Fibonacci, dan perkalian rantai matriks

Mari kita lihat bagaimana memoisasi dapat digunakan untuk meningkatkan penghitungan angka Fibonacci. Pendekatan rekursif untuk menghasilkan angka-angka ini tidak berskala dengan baik. Pada contoh di bawah ini, fungsi function message() { console.log("Greetings Linda!"); } console.log(typeof message); // => function console.log(message instanceof Object); // => true _06 dipanggil secara rekursif sebanyak 177 kali untuk menghasilkan jumlah dari 10 angka Fibonacci pertama

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. _4

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 5Lari

Program melakukan banyak pekerjaan ekstra dengan tidak melacak nilai yang dihitung sebelumnya. Di sinilah memoisasi masuk. Pertama, nyatakan larik cache tempat Anda dapat menyimpan nilai fungsi yang sudah dihitung yang dikembalikan dalam panggilan sebelumnya. Kemudian, alih-alih memanggil fungsi, kembalikan nilai ini dalam panggilan berikutnya ke fungsi tersebut, seperti itu

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 6

var body = "return Math.PI * radius * radius"; var circle = new Function("radius", body); console.log(circle(5)); // => 78.5398.. 7Lari

Untuk menghasilkan 10 angka Fibonacci pertama, fungsi ini dijalankan secara rekursif sebanyak 20 kali saja. Peningkatan yang signifikan

Bisakah saya menambahkan properti ke fungsi di JavaScript?

@alessioalex - Anda pasti dapat menambahkan properti langsung ke fungsi . Ini tidak selalu merupakan cara yang paling tepat untuk dilakukan, tetapi ini (sengaja) menjadi bagian dari bahasa dan berfungsi dengan baik. (Ini memiliki tujuan berbeda untuk menambahkan properti ke prototipe. )

Bagaimana cara menambahkan properti ke objek JavaScript dalam suatu fungsi?

Beberapa cara untuk menambahkan properti ke objek JavaScript termasuk. menggunakan notasi titik, menggunakan notasi braket [ ], menggunakan metode defineProperty(), menggunakan operator spread, dan menggunakan Object. metode penetapan() .

Bagaimana cara menambahkan elemen ke objek dalam JavaScript?

Menggunakan tanda kurung siku [] . Dalam JavaScript, kita dapat menggunakan tanda kurung [] untuk menambahkan elemen ke objek.

Postingan terbaru

LIHAT SEMUA