[1,2,3] la longueur peut obtenir 3, "123". la longueur peut également obtenir 3, tous ceux qui connaissent un peu js le savent.
Mais qu'obtiendront eval.length, RegExp.length, "".toString.length, 1..toString.length ?
Nous obtenons respectivement 1, 2, 0, 1. Que représentent ces nombres ?
En fait, la longueur de la fonction obtient le nombre de paramètres formels.
Jetons un coup d'œil rapide à un exemple :
function test(a,b,c) {} test.length // 3 function test(a,b,c,d) {} test.length // 4
N'est-ce pas très simple, mais il y a aussi des choses spéciales. Si les paramètres sont appelés via des arguments à l'intérieur de la fonction sans réellement définir les paramètres, la longueur n'obtiendra que 0.
function test() { console.log( arguments );} test.length // 0
Cette fonction peut en effet transmettre des paramètres, et les paramètres sont également appelés en interne, mais length ne peut pas connaître le nombre de paramètres transmis.
Le nombre de paramètres réels ne peut être obtenu que via la longueur des arguments lorsque la fonction est exécutée.
function test() { console.log( arguments.length );} test(1,2,3); // 输出 3 test(1,2,3,4); // 输出 4
Ainsi, l'attribut length d'une fonction ne peut obtenir que le nombre de ses paramètres formels, mais pas le nombre de paramètres réels.