Saya baru mengenal dunia Javascript dan saya mengutak-atik penulisan fungsi yang sangat mendasar dan tersandung pada contoh di bawah ini secara tidak sengaja dan saya tidak yakin mengapa itu berfungsi ketika saya tidak melewati parameter ketika fungsi menuntutnya.
Fungsi sampel
function myfunction(x) {
alert("This is a sample alert");
}
Sekarang jika saya memanggil fungsi tersebut, myfunction();
saya diberikan peringatan. Mengapa saya bisa memanggil fungsi tanpa kesalahan atau peringatan ketika saya belum memberikan parameter?
EDIT
Saya tidak mengharapkan begitu banyak jawaban yang bagus dan saya sama sekali tidak dalam posisi untuk mengatakan jawaban mana yang terbaik, jadi saya bisa meminta orang untuk menyarankan jawaban terbaik dan saya akan memberikan penerimaan kepada orang itu.
javascript
overloading
KacangMonyet
sumber
sumber
function foo(x){...}
danfunction foo(x,y,z){...}
Anda hanya dapat memiliki satu fungsi untuk setiap nama.function overloading
di js, Anda memiliki cara lain untuk mengejeknya.Jawaban:
Tidak ada yang akan terjadi- artinya Anda tidak akan mendapatkan kesalahan atau peringatan karena meneruskan parameter dalam javascript bersifat opsional.
Semua parameter yang tidak "diberikan" akan memiliki
undefined
nilai .function foo(x, y, z){ //... } foo(1);
Di dalam
foo
fungsinya sekarang:function foo(x, y, z){ x === 1 y === undefined z === undefined }
Anda bahkan dapat memberikan lebih banyak argumen, seperti:
foo(1,2,3,4,5,7); // Valid!
Anda dapat mengetahui jumlah parameter yang disediakan
arguments.length
dari dalam fungsi.function foo(x, y, z) { console.log('x value: ' + x); console.log('y value: ' + y); console.log('z value: ' + z); console.log('Arguments length: ' + arguments.length); } console.log('Zero parameters'); foo(); console.log('Four parameters'); foo(1, 2, 3, 4);
Contoh fungsi berguna yang menangani sejumlah parameter:
function max() { var maxValue = arguments[0]; for (var i = 1; i < arguments.length; i++) { if (maxValue < arguments[i]) { maxValue = arguments[i]; } } return maxValue; } alert(max(1, 5, 7, 2, 88, 32, 44));
sumber
function myfunction (a,b){}
dan lulus nilai myfungsi (1,2,3,4,5), apakah itu masih valid? Apakah ekspektasi akan ada peringatan atau kesalahan?console.log
serta arguments.length?alert
.return
diabaikan. 2. Anda tidak akan mendapatkan kesalahan atau peringatan. Lihat DEMO iniSemua argumen dalam fungsi JavaScript bersifat opsional (baca "diketik secara longgar").
Anda bisa merujuk ke argumen fungsi di dalam fungsi dengan menggunakan variabel argumen bernama atau objek argumen. Objek ini berisi entri untuk setiap argumen yang diteruskan ke fungsi, indeks entri pertama dimulai dari 0. Misalnya, jika sebuah fungsi melewati tiga argumen, Anda bisa merujuk ke argumen sebagai berikut:
arguments[0] arguments[1] arguments[2]
sumber
Begitulah cara kerja JavaScript. Parameter bersifat opsional, dan akan memiliki nilai yang tidak benar-benar bernilai "tidak ditentukan" dalam fungsi jika tidak ada dalam panggilan fungsi.
Yang saya maksud dengan "opsional" adalah: menjalankan fungsi apa pun melibatkan daftar parameter yang panjang dan sewenang-wenang. Tidak perlu ada hubungan antara jumlah parameter yang diteruskan ke suatu fungsi dan jumlah yang dideklarasikan . Cara terbaik untuk memikirkan deklarasi ini, maka:
function x(a, b, c) { // ... }
adalah bahwa Anda mendeklarasikan fungsi dan mengikat nama "a" ke parameter pertama, "b" ke parameter kedua, dan "c" ke parameter ketiga. Namun, itu sama sekali tidak dijamin bahwa salah satu dari mereka akan benar - benar terikat ke nilai dalam pemanggilan fungsi tertentu nanti.
Dengan token yang sama, Anda dapat menentukan fungsi tanpa parameter sama sekali, lalu "menemukannya" melalui
arguments
objek:function noArgs() { var a = arguments[0], b = arguments[1], c = arguments[2]; // ... }
Jadi itu tidak persis sama dengan fungsi pertama, tetapi hampir dalam banyak hal yang dihitung secara praktis.
Nilai "tidak ditentukan" di JavaScript adalah sebuah nilai, tetapi semantiknya agak tidak biasa seiring perkembangan bahasa. Secara khusus itu tidak persis sama dengan
null
nilainya. Selain itu, "tidak ditentukan" itu sendiri bukanlah kata kunci; itu hanya nama variabel semi-khusus!sumber
optional
"bukan nilai sebenarnya"undefined
?undefined
.undefined
.JavaScript tidak memiliki nilai default untuk parameter fungsi seperti bahasa lain. Jadi, Anda dapat menyampaikan argumen sebanyak atau sesedikit yang Anda inginkan.
Jika Anda tidak meneruskan nilai, parameternya adalah
undefined
.function myfunction(x) { alert(x); } myfunction(); // alerts undefined myfunction(1); // alerts 1 myfunction(1,2,3); // alerts 1
Jika Anda mengirimkan lebih banyak parameter daripada yang ada di tanda tangan, Anda dapat menggunakan
arguments
.function myfunction(x) { alert(x); console.log(arguments); } myfunction(1,2,3); // alerts 1, logs [1,2,3]
sumber
undefined
logs
? Di mana itu mencatatnya?F12
atauCtrl+Shift+J
untuk mengaksesnya.Anda juga bisa memberikan lebih banyak argumen daripada hanya yang disebutkan dalam fungsi
myFunction(1,2,3,4,5,6,7,'etc');
Anda dapat menggunakan
arguments
properti berupa array untuk melihat argumen yang diberikan.sumber
Karena tidak ada kesalahan hingga fungsi tersebut diharapkan dapat bekerja dengan parameter yang seharusnya Anda teruskan.
Sebagai contoh:
function myfunction(x) { return x*2; }
Akan menimbulkan kesalahan; meskipun mungkin hanya a
NaN
(dalam kasus ini) atau avariable is undefined
.sumber
function myfunction(a,b) { var calc = a+b; return;}
dan kemudian memanggil fungsidocument.write(myfunction(1.2));
mengapa saya masih mendapatkan nilaiundefined
meskipun saya meneruskan parameter?return calc;
ataureturn a+b;
(sebagai baris terakhir, jelas; dan yang terakhirreturn
menggantikanvar calc
).return a+b;
?return
sini .Jika Anda menghilangkan argumen, nilainya akan menjadi
undefined
. Ini memungkinkan Anda membuat parameter opsional dengan cukup mudah.Fitur lainnya adalah kemampuan untuk mendefinisikan fungsi tanpa parameter, dan memanggilnya dengan argumen dengan sukses, memanfaatkan
arguments
objek tersebut. Ini memungkinkan Anda dengan mudah membuat array argumen dengan panjang variabel.sumber
Dalam javascript console.log di dalam fungsi memberikan tidak terdefinisi sebagai keluaran untuk parameter yang tidak dilewati tetapi di luar fungsi itu memberikan kesalahan yang tidak ditentukan karena di dalam fungsi browser secara eksplisit mendeklarasikan variabel. Misalnya
console.log(x)
memberikan VM1533: 1 Uncaught ReferenceError: x tidak didefinisikan sedangkan
function test(x) { console.log(x) } test();
memberikan undefined. Itu karena function test () ditulis ulang oleh browser sebagai:
function test(x) { var x; console.log(x) }
Contoh lain : -
var x =5 ; function test(x) { console.log(x) } test();
masih belum ditentukan saat fungsinya menjadi
function test(x) { var x; console.log(x) }
Lansiran dalam contoh di bawah ini akan memberikan tidak terdefinisi: -
var x =5; function test() { alert(x); var x =10; } test();
Fungsi di atas akan menjadi: -
function test() { var x; alert(x); x =10; }
Cakupan variabel javascript di dalam suatu fungsi adalah cakupan level fungsi dan bukan level blok. Misalnya
function varScope() { for(var i = 0; i < 10; i++){ for(var j = 0; j < 5; j++){} console.log("j is "+j) } console.log("i is "+i); } varScope();
akan memberikan keluaran sebagai:
j is 5 i is 10
Sekali lagi fungsinya menjadi: -
function varScope() { var i; var j; for(i = 0; i < 10; i++){ for(j = 0; j < 5; j++){} console.log("j is "+j) } console.log("i is "+i); }
sumber