Maison  >  Article  >  interface Web  >  Exemples de fonctions et d'objets avec des noms en double en JavaScript

Exemples de fonctions et d'objets avec des noms en double en JavaScript

黄舟
黄舟original
2017-10-03 05:59:491289parcourir

Récemment, un collègue a posé une question : que se passerait-il si la fonction et l'objet portaient le même nom en js ? Ce problème mérite d'être discuté en détail, donc cet article est ici. Cet article vous présente principalement les informations pertinentes sur les fonctions et les objets avec des noms en double en JavaScript. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Cet article présente principalement le contenu pertinent sur les fonctions et les objets avec des noms en double en JavaScript, et le partage pour votre référence et votre étude , pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée.

JavaScript permet des déclarations répétées de variables, et la déclaration ultérieure remplace la précédente.


var a = 1;
var a = 'x';
console.log(a);
//输出'x'

JavaScript permet une définition répétée des fonctions.

JavaScript n'a pas de concept de surcharge. Il distingue uniquement les fonctions en fonction de leurs noms. La fonction du même nom définie après

écrase la précédente, quels que soient les paramètres.


function test() {
 console.log("test");
}
test(); //输出 "test arg0 + undefined"

function test(arg1) {
 console.log("test arg" + arguments.length + " + " + arg1);
}
test(1,2); //输出 "test arg2 + 1"

Si le nombre de paramètres réels est inférieur aux paramètres formels, alors les affectations par défaut restantes ne sont pas définies si les paramètres réels sont transmis plus de ; les paramètres formels, alors tous seront transmis, mais il n'y a pas de paramètres formels correspondants à référencer (mais vous pouvez utiliser des arguments pour obtenir les paramètres restants)


function test(arg1) {
 for(var i=0; i<arguments.length; i++) {
 console.log(arguments[i]);
 }
}
test(1,2); //输出 1 2

Lorsqu'une variable porte le même nom qu'une fonction, la variable prend effet

Cela implique une pré-analyse des variables et des fonctions :

- Les déclarations de variables seront placées en haut, et les déclarations de fonctions seront également placées en haut et déclarées avant les variables.

- Lorsque la déclaration d'une variable et l'instruction d'affectation sont écrites ensemble, le moteur JS la divisera en deux parties : déclaration et affectation. La déclaration sera placée en haut et l'affectation sera. rester à la position initiale.

- Les variables déclarées ne seront plus déclarées.


var a = 100;
function a() {
 return "function";
}
console.log(a); //输出 100
console.log(a()); 
/*
报错
Uncaught TypeError: a is not a function
 (anonymous function) @test.html:9
*/

Il existe deux types de fonctions dans JS, l'une est une fonction normale et l'autre est un objet fonction. Ce qui suit est un "objet fonction", qui déclare en fait une fonction anonyme puis attribue la méthode init de la fonction à la variable.


var a = 100;
var a = function() {
 return "function";
}
console.log(a);
/* 
输出
function() {
 return "function";
}
*/
console.log(a()); //输出 "function"

La fonction a le même nom que la variable interne

Définir une fonction ordinaire , c'est-à-dire que dans la variable de fenêtre Next, définissez une clé dont le nom est le nom de la fonction et dont la valeur est l'adresse de la fonction. Ceci à l’intérieur de la fonction pointe vers l’objet window.


function a() {
 console.log(this); //输出 window{...}
 this.a = 1;  //即 window.a = 1,此时window下的function a已经被该变量覆盖了。
 var a = 5;  //下面的这几个变量都是局部变量,仅在花括号范围内有效。 
 a = 10;
 var v = "value"
 return "function";
}
console.log(a);  //输出 function a {...}
console.log(a()); //输出 "function"
console.log(a);  //输出 1
console.log(v);
/*
输出
Uncaught ReferenceError: v is not defined
 (anonymous function) @ mycolor.html:15
*/

Résumé

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn