" "Constructeur" :
La liste de paramètres peut avoir autant de paramètres que vous le souhaitez, suivis du corps de la fonction, par exemple :
imprimera le résultat :
var funcName = new Function( [argname1, [... argnameN,]] body );
var add = new Function("x", "y", "return(x+y)"); print(add(2, 4));
ou :
En fait, un tel sucre syntaxique est plus susceptible de mal comprendre les programmeurs des domaines traditionnels. Le mot-clé function appellera Function crée un nouvel objet et transmet avec précision la liste des paramètres et le corps de la fonction au constructeur de la fonction.
function add(x, y){ return x + y; }
var add = function(x, y){ return x + y; }
var str = "This is a string";
function p(){ print("invoke p by ()"); } p.id = "func"; p.type = "function"; print(p); print(p.id+":"+p.type); print(p());
function (){ print("invoke p by ()"); } func:function invoke p by ()
En fait, lorsque JavaScript gère les paramètres de fonction, c'est différent des autres langages compilés. Ce que l'interpréteur transmet à la fonction est une valeur interne de type tableau appelée arguments. Cela se fait lorsque l'objet fonction est généré. . est initialisé. Par exemple, lorsque nous transmettons un paramètre à adPrint, les deux autres paramètres ne sont pas définis. De cette façon, nous pouvons traiter ces paramètres non définis à l'intérieur de la fonction adPrint, qui peuvent être exposés à l'extérieur : nous pouvons traiter n'importe quel paramètre.
function adPrint(str, len, option){ var s = str || "default"; var l = len || s.length; var o = option || "i"; s = s.substring(0, l); switch(o){ case "u": s = s.toUpperCase(); break; case "l": s = s.toLowerCase(); break; default: break; } print(s); } adPrint("Hello, world"); adPrint("Hello, world", 5); adPrint("Hello, world", 5, "l");//lower case adPrint("Hello, world", 5, "u");//upper case
Hello, world Hello hello HELLO
Portée de la fonction
function sum(){ var result = 0; for(var i = 0, len = arguments.length; i < len; i++){ var current = arguments[i]; if(isNaN(current)){ throw new Error("not a number exception"); }else{ result += current; } } return result; } print(sum(10, 20, 30, 40, 50)); print(sum(4, 8, 15, 16, 23, 42));//《迷失》上那串神奇的数字 print(sum("new"));
150 108 Error: not a number exception
Les fonctions JavaScript s'exécutent dans la portée locale et les fonctions s'exécutent dans la portée locale Le corps peut accéder à ses variables externes (éventuellement de portée globale) et fonctions. La portée de JavaScript est la portée lexicale. La portée lexicale signifie que sa portée est déterminée lors de sa définition (analyse lexicale), et non lors de son exécution, comme dans l'exemple suivant :
public void method(){ for(int i = 0; i < obj1.length; i++){ //do something here; } //此时的i为未定义 for(int i = 0; i < obj2.length; i++){ //do something else; } }
function func(){ for(var i = 0; i < array.length; i++){ //do something here. } //此时i仍然有值,及I == array.length print(i);//i == array.length; }
Et le résultat correct devrait être :
var str = "global"; function scopeTest(){ print(str); var str = "local"; print(str); } scopeTest();
Parce que dans la définition de la fonction scopeTest, la variable non déclarée str est accédée à l'avance puis la variable str est initialisée, le premier print(str) renverra une erreur non définie. Alors pourquoi la fonction n'accède-t-elle pas à la variable str externe à ce moment-là ? En effet, une fois l'analyse lexicale terminée, lors de la construction de la chaîne de portée, la variable var définie dans la fonction sera mise dans la chaîne, donc str est dans l'ensemble de la fonction scopeTest sont tous visibles (de la première ligne à la dernière ligne du corps de la fonction). Puisque la variable str elle-même n'est pas définie, le programme est exécuté séquentiellement et renverra un défini à la première ligne. valeur à str, donc la troisième ligne print(str) de la ligne renverra "local".
global local
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!