Rumah  >  Soal Jawab  >  teks badan

javascript - Terangkan definisi fungsi ini

Fungsi yang ditakrifkan secara umum

const foo = function(){console.log('666')}; 
foo(); //666

atau

function foo(){console.log('666')}; 
foo(); //666

Jadi apakah penjelasan di bawah?

const foo = function foo(){console.log('666')}; 
foo(); 
欧阳克欧阳克2662 hari yang lalu931

membalas semua(5)saya akan balas

  • 大家讲道理

    大家讲道理2017-07-05 10:55:20

    Sebenarnya, penyoal menganggap cara penulisan ketiga adalah pelik dan nampak tidak berguna, kerana dia tidak memahami penggunaan cara penulisan ini yang betul Contoh kedua adalah lebih intuitif

    Secara ringkasnya, yang pertama dan ketiga ialah kedua-dua ungkapan fungsi, dan yang kedua ialah pengisytiharan fungsi. Yang ketiga ialah ungkapan fungsi yang lebih istimewa dengan kebolehan istimewa.

    Untuk menjelaskan masalah ini, kita perlu faham 'What, How, Why'.

    Jadi, perbezaan utama antara yang pertama dan kedua ialah masa pengisytiharan mereka tidak konsisten ungkapan Fungsi hanya akan memberikan nilai kepada pembolehubah apabila kod dilaksanakan pada pernyataan itu, manakala pengisytiharan fungsi akan diberikan apabila memasukkan semasa. konteks pelaksanaan fungsi.

    Contoh intuitif

    console.log(foo); // undefined
    
    var foo = function(){};
     
    console.log(foo); // function(){}
    
    
    console.log(bar); // function(){}
    
    function bar() {}
    
    console.log(bar); // function(){}
    

    Untuk jenis ketiga, contoh intuitif ialah ini

    console.log(foo); // undefined
    
    var foo = function bar(){
        console.log(bar); // function(){...}
        console.log(foo); // undefined
    };
     
    console.log(foo); // function(){}
    console.log(bar); // undefined
    

    Jadi anda boleh melihat perbezaannya Pengecam fungsi yang ditulis dengan cara ini berbeza daripada pengisytiharan fungsi Ia boleh diakses di dalam fungsi, tetapi tidak boleh diakses di luar fungsi. Jadi kita lihat ia ditulis seperti ini di banyak tempat Satu kelebihan ialah apabila memanggil dirinya sendiri apabila menggunakan rekursi, fungsi itu mempunyai nama, yang lebih intuitif

    .

    Kenapa ni?

    Apabila pelayar menghuraikan, ia sebenarnya membayar pengecam selepas ungkapan kepada objek fungsi semasa, jadi dalam contoh di atas

    foo.name; // bar

    Dalam konteks pelaksanaan dalam fungsi, objek fungsi semasa berada dalam skop, jadi ia boleh dipanggil secara dalaman

    Atas

    balas
    0
  • 世界只因有你

    世界只因有你2017-07-05 10:55:20

    Tambahkan penjelasan definisi ketiga: Ia sendiri ialah 函数表达式,并不是函数定义语句 Ungkapan fungsi boleh mempunyai nama fungsi, tetapi nama fungsi ini hanya boleh digunakan di dalam ungkapan fungsi.
    Rujuk Panduan Autoritatif Javascript 8.1 Definisi Fungsi Bahagian ini:

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:55:20

    Terdapat banyak cara untuk menentukan fungsi dalam fungsi JavaScript MDN:

    • Pengisytiharan fungsi (penyataan fungsi)

    • ekspresi fungsi

    • Pengisytiharan penjana fungsi (penyataan fungsi*)

    • Ekspresi penjana fungsi (ungkapan fungsi*)

    • Ungkapan fungsi anak panah (=>)

    • Pembina fungsi

    • Pembina fungsi penjana

    Untuk soalan poster asal, kami hanya bercakap tentang pengisytiharan fungsi dan ungkapan fungsi.

    1) Pengisytiharan fungsi

    function name([param[, param[, ... param]]]) { 
        statements 
    }

    2) Ungkapan fungsi

    let function_expression = function [name]([param1[, param2[, ..., paramN]]]) {
       statements
    };

    nama adalah pilihan Apabila nama nama fungsi diabaikan, fungsi itu menjadi fungsi tanpa nama.

    Melihat ini, tidak perlu terus bercakap tentang mengapa terdapat cara penulisan ketiga, jika tidak, ia akan benar-benar mengelirukan, tetapi di sini saya perlu bercakap tentang perbezaan antara pengisytiharan fungsi dan ekspresi fungsi, yang terutamanya ditunjukkan dalam isu kenaikan pangkat berubah-ubah:

    JavaScript hanya mengangkat pengisytiharan, bukan permulaan. Terdapat promosi berubah-ubah di bawah pengisytiharan fungsi, tetapi tidak di bawah ungkapan fungsi Oleh itu, ungkapan fungsi memanggil fungsi dahulu dan kemudian mengisytiharkan fungsi dan ralat akan dilaporkan.

    balas
    0
  • 怪我咯

    怪我咯2017-07-05 10:55:20

    Yang pertamafoo => 没名字的function
    第三个foo => 有名字的function

    Tetapi dua function的执行内容是一样的的,都把这个函数赋值给fooobjek permulaan pembolehubah

    Bagi yang kedua, hanya isytiharkan fungsi seperti biasa dan kemudian panggil fungsi tersebut

    balas
    0
  • 阿神

    阿神2017-07-05 10:55:20

    Jenis ketiga ialah operasi tugasan! Berikan fungsi kepada foo! Jika anda menggunakan foo sebelum ini, ia adalah sama seperti menggunakan pembolehubah yang tidak ditentukan terlebih dahulu! Jika anda console.log(foo) selepas sekeping kod yang anda tulis untuk mencetak keseluruhan fungsi, menambah () secara semula jadi akan memanggil fungsi ini!
    Hanya ingat bahawa tanda sama rata tunggal sentiasa merupakan operasi tugasan dalam js, dan bahagian kanan tanda sama ialah kandungan tugasan! Jangan terlalu memikirkannya! Walaupun anda menulis 100 lagi fungsi selepas tanda sama, ia hanya akan menjadi tugasan paling banyak!

    balas
    0
  • Batalbalas