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.

Tambahkan properti ke fungsi javascript


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.