Maison > interface Web > js tutoriel > Analyse des dernières questions d'entretien JS

Analyse des dernières questions d'entretien JS

php中世界最好的语言
Libérer: 2017-11-27 13:54:30
original
1993 Les gens l'ont consulté

Pour une interface Web, vous rencontrerez certainement des questions d'entretien JS au cours de l'entretien. Aujourd'hui, je vais résumer pour vous certaines des dernières questions d'entretien JS

Pré-analyse : Dans le scope actuel, avant l'exécution de js, les mots-clés var et function seront déclarés à l'avance, mais ne seront pas attribués (avis personnel)

Je suis impressionné par la pré-analyse, pas parce que c'est difficile , mais soyez prudent. Si vous êtes négligent, vous risquez d'écrire la mauvaise réponse ! J'ai rencontré plus d'une question de pré-analyse, et je m'en souviens encore de deux. Laissez-moi vous le dire !

2-1 Pré-analyse 1

alert(a)
a();
var a=3;function a(){
    alert(10)
}   
alert(a)
a=6;
a();
Copier après la connexion

------------Ligne de séparation------------- - ----

alert(a)
a();
var a=3;
var a=function(){
    alert(10)
}   
alert(a)
a=6;
a();
Copier après la connexion

Quand j'ai vu ce code, j'ai mal répondu. Plus tard, j'ai demandé conseil à un ami, puis je l'ai compris moi-même, et ça s'est arrangé !
Il y a en fait deux points de test. Le premier consiste à déclarer les variables à l'avance, et le second consiste à déclarer les fonctions avant les déclarations de variables !
Permettez-moi de l'analyser brièvement ci-dessous,
La première partie des résultats de l'opération :
1. La déclaration de fonction a priorité sur la déclaration de variable, donc au début, a est la fonction a(){alert(10) }, vous veillerez à cette fonction.
2.a(), lorsque la fonction est exécutée, alert(10) apparaît
3. Var a=3 est exécuté donc alert(a) affiche 3
4 Puisque a n'est pas une fonction ; , Ainsi, lors de l'exécution de a(), une erreur sera signalée.
La deuxième partie des résultats de l'opération :
1.underfind
2. Rapport d'erreur
Comme mentionné précédemment, la pré-analyse est une pré-déclaration avec les mots-clés var et function, mais aucune attribution de valeur. . Donc, au début, c'était sous-financé, puis une erreur a été signalée car lorsque a() était exécuté, a n'était pas une fonction.

//Expression de fonction, identique à la déclaration de variable

var a=function(){
    alert(10)
}
Copier après la connexion

//Déclaration de fonction, meilleure que la déclaration de variable

function a(){
    alert(10)
}
Copier après la connexion

2-2. Pré-analyse et portée

var a=0;function aa(){
    alert(a)
    a=3
}
Copier après la connexion

//Le résultat est que rien ne se passe, car alert(0) n'est exécuté que lorsque la fonction aa est exécutée

------------Ligne de séparation 1--------

var a=0;function aa(){
    alert(a)
    var a=3
}
aa();
Copier après la connexion

// underfind Dans la fonction aa, il y a var a=3, puis dans le scope aa, la variable a est déclarée à l'avance, mais elle ne se verra pas attribuer de valeur, elle est donc underfind

-- ------- ---Ligne de séparation 2------------------

var a=0;function aa(a){
    alert(a)
    var a=3
}
aa(5)
alert(a)
Copier après la connexion

//5,0 Dans le corps de la fonction, le <🎜 du paramètre a >Priorité est supérieur à la variable a
------------Ligne de séparation 3--------------- --------

var a=0; fonction aa(a){
alerte(a)
a=3
}
aa(5)
alert(a)
//5,0 Dans le corps de la fonction, exécutez alert(a) et a=3 Ce qui est modifié n'est pas la variable globale a, mais le paramètre a

-. ----------- Ligne de démarcation 4------------------


var a=0;function aa(a){
    alert(a)
    var a=3
    alert(a)
}
aa(5)
Copier après la connexion
//5 ,3

//J'ai un peu ça aussi, je ne comprends pas. Merci de demander conseil en ligne. Il y a deux réponses (si vous savez comprendre, merci de me donner quelques conseils dans les commentaires)
. //1. La priorité du paramètre est supérieure à la déclaration de la variable, donc la déclaration de la variable a est en fait ignorée, cette fois équivaut à
//var a=0;
//function aa(a){<. 🎜>// var a=5;
// alerte(a)
// a=3
// alerte(a)
//}
//aa(5)

//2. Les paramètres formels et les variables locales ont la même priorité, ce qui équivaut à
//var a=0;
//function aa(a){
// var a; Déclarer en premier
// a=5 Puisque les paramètres formels et
nom de la variable
L'échelle est la même, couverte ! // alerte(a)// a=3
// alerte(a)
//}
//aa(5)

--- ----------Ligne de séparation 5------------------



//Tout d'abord, paramètres La priorité est supérieure à la variable globale. Puisqu'aucun paramètre n'est passé, elle est underfind
var a=0;function aa(a){
    alert(a)
    a=3
    alert(a)
}
aa()
alert(a)
//underfind  3  0
Copier après la connexion
//a=3 En fait, la valeur du paramètre formel a est modifiée, pas la variable globale a, et alert(. a) est également un paramètre formel a

//La dernière alerte(a), vous savez


3 Boucles et récursion

3-1. 🎜>

Je n’en dirai pas grand chose, c’est très simple, mais très classique. C'est-à-dire que l'élément actuel est égal à la somme des deux éléments précédents

3-2 Disposition des données

var arr=[];for(var i=0;i<10;i++ ){
    i<=1?arr.push(1):arr.push(arr[i-1]+arr[i-2]);
}
console.log(arr)
Copier après la connexion
Par exemple, 123454321 23456765432

Comment faire cela ? A cette époque, je l'ai écrit en deux étapes, d'abord en montrant le recto, puis en montrant le verso

Le code est



C'est trop de code plus tard, j'ai étudié ce genre de <. 🎜>

//01234543210
//先展示前面的   01234
//n:开始的数字    m:结束的数字function num1(n,m){    for(var i=n;i<m;i++){
        //再展示后面的 543210
        console.log(i);        if(i===m-1){
            num2(n,m)
        }
    }
}function num2(n,m){    for(var i=m;i>=n;i--){
        console.log(i)
    }
}
num1(2,5)  //2345432
Copier après la connexion
L'explication est la suivante

1. Exécutez d'abord num(2,5), qui est
function num(n,m){
    console.log(n);    if(n<m){
        num(n+1,m);
        console.log(n);
    }
}
num(2,5)  //2345432
Copier après la connexion

, puis

<🎜. >
console.log(2); ->  num(3,5);  ->  console.log(2);      
//执行num(3,5);  就是是相当于   console.log(3); -> num(4,5); -> console.log(3); 下面以此类推
console.log(2); -> console.log(3); -> num(4,5); -> console.log(3); ->  console.log(2);
Copier après la connexion
et enfin


console.log(2); -> console.log(3); -> console.log(4); -> num(5,5); -> console.log(4); -> console.log(3); ->  console.log(2);
Copier après la connexion
Je pense que vous maîtrisez les méthodes après avoir lu ces cas. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !


console.log(2); -> console.log(3); -> console.log(4); -> console.log(5); -> console.log(4); -> console.log(3); ->  console.log(2);
Copier après la connexion

Lecture connexe :


Comment créer une animation de vol de papillon avec CSS3

Comment utiliser Canvas L'interaction entre la balle et la souris

Comment utiliser Canvas pour créer l'effet d'animation de fontaine de particules

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!

Étiquettes associées:
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
Derniers numéros
c++ appelle javascript
Depuis 1970-01-01 08:00:00
0
0
0
Qu’est-ce que le garbage collection JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Que sont les fonctions de hook JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Comment obtenir la date actuelle en JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal