Soalan mengenai kaedah panggilan dalam javascript
我想大声告诉你
我想大声告诉你 2017-05-19 10:34:27
0
5
666
window.onload=init;
function init(){
    var takeNoteButton=document.getElementById("take-note");
    takeNoteButton.onclick=createNote;
}
function createNote(e){
    //dosomething
}

各位大神好,这段代码中对createNote函数的调用:
     takeNoteButton.onclick=createNote;
而实际的createNote(e)有个参数,这样也能调么!!
我想大声告诉你
我想大声告诉你

membalas semua(5)
洪涛

Sebenarnya, kod ini tidak memanggil fungsi seperti ini

takeNoteButton.onclick = createNote;

Perhatikan kod yang anda tulis setiap hari Bukankah panggilan kami ke berfungsi semuanya dalam bentuk xxxxx(), xxx.xxx() atau xxx.call(), dsb.?
Anda boleh memahami kod ini sebagai penyataan tugasan Atribut onclick takeNoteButton diberikan nama fungsi createNote Rujukan sebenar menunjukkan fungsi tertentu yang diisytiharkan di bawah.

Dengan cara ini, apabila penyemak imbas memantau acara klik takeNoteButton, anda boleh bayangkan bahawa ia sebenarnya membuat panggilan fungsi seperti takeNoteButton.onclick(event).

Mari kita bincangkan tentang parameter di bawah Parameter sebenar yang diluluskan oleh panggilan fungsi dan parameter formal pengisytiharan fungsi sebenarnya berasingan dan tidak perlu sepadan. Selain itu, parameter yang dinyatakan semasa pengisytiharan tidak perlu dimasukkan (akan dianggap sebagai undefined Call Jika parameter benar-benar diluluskan tidak digunakan dalam badan fungsi yang diisytiharkan, tiada masalah sama sekali.

Sebagai contoh, fungsi yang dipanggil apabila acara ini diklik dipanggil oleh penyemak imbas itu sendiri, dan objek acara dihantar sebagai parameter sebenar. Kemudian bekerja ke belakang, apabila kita menulis badan fungsi tertentu, kita boleh menggunakan peristiwa, e, abc, atau mana-mana nama yang mematuhi spesifikasi sebagai parameter rasmi untuk mendapatkan parameter sebenar yang diluluskan. Sudah tentu, Anda tidak perlu parameter formal. Anda juga boleh menggunakan objek tatasusunan argumen untuk mengakses parameter sebenar yang diluluskan, seperti:

var a = 1;
fn(a);
// 可以这样拿到a
function fn(param) {
    console.log(param);
}
// 也可以这样拿到a
function fn() {
    console.log(arguments[0]);
}

Malah, ini juga memberikan kami idea untuk reka bentuk parameter semasa menulis beberapa pemalam komponen Kami boleh menentukan parameter sebenar yang dihantar semasa memanggil fungsi di dalam komponen, dan nilai khusus parameter sebenar ini boleh direka bentuk sebagai terdedah. parameter untuk kegunaan luaran, berikan contoh mudah jQuery:

$.fn.plugin = function(option) {
    var defaultOp = {
        a : 'default a'
    };
    var options = $.extend(defaultOp, option || {});
    var fn = function(a){ console.log(a) };
    fn(options.a);
}

Kod ini boleh dipanggil melalui $().plugin() untuk mengeluarkan lalai lalai a
Anda juga boleh menggunakan $().plugin({a : '123'}) untuk menghantar parameter dan output yang ditentukan 123
parameter formal bagi fungsi yang sebenarnya kami tulis masih a, dan parameter yang diluluskan apabila sebenarnya memanggil fungsi itu masih pilihan.a, dan nilai lalai parameter luaran tidak dihantar masuk.

大家讲道理

Panggilan fungsi dalam js tiada kaitan dengan bilangan parameter baris Parameter fungsi js ialah tatasusunan seperti argumen, iaitu, jika anda lulus dalam satu parameter, parameter yang sepadan ialah argumen[0], dan jika. terdapat dua parameter, ia adalah argumen[0] dan argumen[1]. Oleh itu, bilangan parameter baris dan parameter sebenar tidak perlu sepadan dengan tepat Lapisan bawah fungsi akan sepadan mengikut bilangan parameter yang anda masukkan.

習慣沉默

Sudah tentu mungkin, anda boleh faham bahawa onclick adalah penunjuk, menunjuk ke fungsi createNote, bukan sebenarnya memanggilnya. Memanggil kaedah onclick ini dilakukan oleh penyemak imbas, dan penyemak imbas akan lulus dalam parameter e.

Boleh faham kod berikut:

var obj = {
    onclick: null
};

function test(msg) {
    console.log(msg);
}

obj.onclick = test;

// 当点击事件发生以后
if (obj.onclick && typeof obj.onclick === 'function') {
    obj.onclick("这是我传进去的参数,相当于e");
}
世界只因有你

Dalam js, parameter formal dan parameter sebenar tidak semestinya sepadan satu dengan satu Fungsi mendengar acara adalah bersamaan dengan fungsi panggil balik.

Apabila peristiwa berlaku, penyemak imbas akan memanggil fungsi ini dan memasukkan objek acara.

世界只因有你

Saya rasa soalan ini agak cacat kerana anda bertanya sama ada fungsi itu boleh dipanggil? Sudah tentu ia boleh dipanggil kerana fungsi ini tergolong dalam pembolehubah seterusnya tetingkap Malah, fungsi juga pembolehubah! Ia hanya istimewa. Terdapat parameter rasmi tetapi tidak semestinya parameter sebenar Jika parameter sebenar yang anda masukkan adalah istimewa atau dalam skop lain, anda perlu mendapatkan parameter sebenar sebelum meneruskannya parameter

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan