Maison > interface Web > js tutoriel > le corps du texte

5 questions d'entretien JavaScript classiques_compétences javascript

WBOY
Libérer: 2016-05-16 16:34:14
original
1392 Les gens l'ont consulté

1 : Portée

Copier le code Le code est le suivant :

(fonction() {
var a = b = 5;
})();
console.log(b);

Qu'est-ce qui sera imprimé sur la console ?

Réponse

Le code ci-dessus imprimera 5.

L'astuce pour résoudre ce problème est qu'il existe deux déclarations de variables, mais a est déclarée à l'aide du mot-clé var. Indique qu'il s'agit d'une variable locale d'une fonction. En revanche, b devient une variable globale.

Une autre astuce avec cette question est qu'elle n'utilise pas le mode strict (« use strict » ;). Si le mode strict est activé, le code générera une ReferenceError : b n'est pas défini. N'oubliez pas que le mode strict nécessite une spécification explicite afin d'implémenter les déclarations de variables globales. Par exemple, vous devez écrire :

Copier le code Le code est le suivant :

(fonction() {
'utiliser strict';
var a = fenêtre.b = 5;
})();

console.log(b);

2 : Créer une méthode "native"

Définissez une fonction de répétition pour l'objet chaîne. Lorsqu'il est transmis dans un entier n, il renvoie le résultat de la répétition de la chaîne n fois. Par exemple :

Copier le code Le code est le suivant :

console.log('bonjour'.repeafy(3));

devrait imprimer hellohellohello.

Réponse

Une implémentation possible ressemble à ceci :

Copier le code Le code est le suivant :

String.prototype.repeafy = String.prototype.repeafy || fonction (fois) {
var str = '';
pour (var je = 0; je < fois; je ) {
       str = ceci;
>
Retour str;
};

Les questions actuelles testent les connaissances des développeurs sur l'héritage et les prototypes JavaScript. Cela vérifie également que le développeur sait comment étendre les objets intégrés (même si cela ne devrait pas être fait).

Un autre point important ici est que vous devez savoir comment ne pas remplacer les fonctionnalités qui peuvent déjà être définies. Testez que la définition de la fonction n'existait pas auparavant :

Copier le code Le code est le suivant :

String.prototype.repeatify = String.prototype.repeatify || function(times) {/* codez ici */};

Cette technique est particulièrement utile lorsqu'il vous est demandé de rendre compatibles les fonctions JavaScript.

3 : Levage du relevé

Exécutez ce code et quels résultats seront affichés.

Copier le code Le code est le suivant :

fonction test() {
console.log(a);
console.log(foo());
var a = 1;
Fonction foo() {
Retour 2 ;
>
>

10 : test();

Réponse

Le résultat de ce code est indéfini et 2.

La raison est que les déclarations des variables et des fonctions sont avancées (déplacées vers le haut de la fonction), mais les variables ne reçoivent aucune valeur. Ainsi, lors de l'impression de la variable, elle existe dans la fonction (elle a été déclarée), mais elle n'est toujours pas définie. Autrement dit, le code ci-dessus est équivalent au suivant :

Copier le code Le code est le suivant :

fonction test() {
var a;
Fonction foo() {
Retour 2 ;
>

console.log(a);
console.log(foo());

a=1;
>

test();

4 : Comment cela fonctionne en JavaScript

Que produira le code suivant ? Donnez votre réponse.

Copier le code Le code est le suivant :

var nom complet = 'John Doe';
var obj = {
Nom complet : 'Colin Ihrig',
; accessoire : {
        nom complet : 'Aurelio De Rosa',
        getFullname : function() {
            return this.fullname;
>
>
};

console.log(obj.prop.getFullname());

var test = obj.prop.getFullname;

console.log(test());

Réponse

La réponse est Aurelio De Rosa et John Doe. La raison en est que dans une fonction, le comportement de celle-ci dépend de la manière dont la fonction JavaScript est appelée et définie, et pas seulement de la manière dont elle est définie.

Dans le premier appel console.log(), getFullname() est appelé en fonction de l'objet obj.prop. Le contexte fait donc référence à ce dernier et la fonction renvoie le nom complet de l'objet. En revanche, lorsque getFullname() est affecté à la variable de test, le contexte fait référence à l'objet global (fenêtre). En effet, test est implicitement défini comme propriété de l'objet global. Pour cette raison, la fonction renvoie le nom complet de la fenêtre, qui est la valeur définie sur la première ligne.

5 : appeler() et postuler()

Résolvons maintenant le problème précédent pour que le console.log() final imprime Aurelio De Rosa.

Réponse

Ce problème peut être modifié en forçant l'utilisation de call() ou apply() pour changer le contexte de la fonction. Ci-dessous, j'utiliserai call(), mais dans ce cas, apply() affichera le même résultat :

Copier le code Le code est le suivant :

console.log(test.call(obj.prop));
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!