prefacio
Dirección original && mi blog
sabe casi && sabe casi columnas
Jane libros
de Henan front-end intercambio neto Qunguan
Última escribió un artículo algunos me impresionó las preguntas de la entrevista (a) no han visto los estudiantes pueden ir oh.
La fuente del título del artículo: Hay más de 20 de las preguntas cara frontal, seguro que no vienen a ver el punto? .
Si la pregunta anterior en este artículo que no menciono, muestra que algunos problemas se pueden obtener fácilmente o cheque simple o una capacidad limitada que no puedo contestar a cabo. Si no lo hace, y algunos de los temas que no mencionar que creo que es la capacidad limitada no puede responder de ella. Hey hey hey. Es broma, pero puede dejar un mensaje debajo de Oh!
texto
O las viejas reglas dan el tema, y luego ver mi respuesta, ¿qué consejo puede mencionar en el tablón de anuncios.
Lo que hace a, b, c, respectivamente, de salida?
function fun(n,o){
console.log(o)
return{
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1); c.fun(2); c.fun(3);
Uso como muchos métodos para identificar los elementos que se repiten en la matriz tenido
Por ejemplo: [1,2,4,4,3,3,1,5,3]
Salida: [1,3,4]
Teniendo en cuenta algunos de los documentos (documentos), palabras (palabras), para encontrar todos los documentos en el documento todas las palabras presentes
var docs = [{
id: 1,
words: ['hello',"world"]
},
{
id: 2,
words: ['hello',"kids"]
},
{
id: 3,
words: ['zzzz',"hello"]
},
{
id: 4,
words: ['world',"kids"]
}
];
findDocList(docs,['hello']) //文档1,文档2,文档3
findDocList(docs,['hello','world']) //文档1
Lo que el resultado siguiente código?
var test = (function(a){
this.a = a;
return function(b){
return this.a + b;
}
}(function(a,b){
return a;
}(1,2)));
console.log(test(1));
No ciclo, la creación de una matriz de longitud 100, y el valor de cada elemento es igual a su índice.
Un números enteros si todo el mundo es simétrico, a continuación, esta cifra es el número simétrica. Así que por favor averiguar a través de 1 al número 10000 para todos los de simetría
La siguiente salida de código es lo que?
var myObject = {
foo: "bar",
func: function(){
var self = this;
console.log('outer func : this.foo' + this.foo);
console.log('outer func : self.foo' + self.foo);
(function(){
console.log('inner func : this.foo' + this.foo);
console.log('inner func : self.foo' + self.foo);
})();
}
};
myObject.func();
Por favor, escriba las siguientes reglas de expresiones regulares de descripción detallada
/ ^ (0 [1-9] dd ?)? [1-9] d {6} d? $ /
/ ^ (1 [89] | [2-9] d | 100) $ / i
/ ^ [w -] + @ [a-Z0-9 -] + ({[az] {2,6}}) { 1,2} $ / i
Por favor método de escritura molesto gama
Puesta en práctica de escritura element.getElementsByClassName
Por favor salida de código de escritura
if(!("a" in window)){
var a = 1;
}
alert(a);
Por favor salida de código de escritura
var handle = function(a){
var b = 3;
var tmp = function(a){
b = a + b;
return tmp;
}
tmp.toString = function(){
return b;
}
return tmp;
}
alert(handle(4)(5)(6));
javscript expresión del valor "[] == '' 'es, ¿por qué?
Js genera el código HTML siguiente, haga clic en cada li ...... cuando el pop, 2, 3
// li onclick caso puede estallar índice se hace clic en él actualmente =?
<ul id="testUrl">
<li>index=0</li>
<li>index=1</li>
</ul>
Mapa de Nueva ES5 es necesaria para aumentar la ES5 método siguiente mapa ambiental
La respuesta se revela
La primera pregunta
function fun(n,o){
console.log(o)
return{
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1); c.fun(2); c.fun(3);
Vamos a echar un vistazo al paso a paso. En primer lugar, a=fun(0)
porque sólo pasar un parámetro, console
la salida es el segundo valor del parámetro, es, sin duda, que la producción undefined
.
Luego, para a.fun(1)
ser visto, delante de esta frase está llamando a fun(0)
la función devuelve un objeto dentro de la parte de atrás fun
, esta fun
vez fun(m,n)
vuelve a cabo. Esta vez Nota : este objeto se fun
llama por un momento antes de regresar fun(m,n)
, que console
será ejecutado, se puede determinar, desde luego, no va a pasar de la producción de 1, 1, porque como el primer parámetro pasado fun(m,n)
, y la console
salida es la primera dos parámetros. La salida será a continuación, Shane?
Bueno, no todo el mundo adivinanzas, la respuesta es cero. Algunos pueden preguntarse, Nani? Para el pelo es 0,0 provienen de?
Para explicar lo que quiero, siempre y cuando tenga un cierre claro. Aquí cierre empleado. Sabemos que hay una función de cierre está fuera del alcance de las variables internas a través del cierre de las funciones de acceso. De hecho, correr a=fun(0)
del tiempo, return
los objetos de función en fun
el pasado en el 0 como segundo parámetro pasó fun
a cabo en el interior y luego regresar 0 se ha guardado. Así que cuando el correr a.fun(1)
el tiempo es en realidad de salida antes de cero. Las dos llamadas también hacia atrás y este principio, el resultado final es 0.
Puede ser un poco alrededor, tome tiempo para mirar a sí mismos o de depurar. (He estado tratando de articular, y si no sé si usted deja un mensaje =. =).
Luego, para b
, si es que llegan a conocer aquí en frente de ella no es difícil. fun(0)
tiempo de funcionamiento será return
un objeto fuera de la parte posterior de una serie de llamadas encadenadas están llamando a la función devuelve un objeto delante de fun
y perder la potencia esundefined 0 1 2
Y, finalmente, a c
, si b
todo lo que obtienen a saber, aquí básicamente nada más difícil el. Respectivamente, se emitirá undefined 0 1 1
.
Si usted no entiende, entonces le sugiero que paso a paso, aún no se sabe si puede dejar un mensaje a continuación, voy a intentar mi mejor esfuerzo para darle la capacidad de explicar.
La segunda pregunta
El uso del método hallazgo como muchos elementos de la matriz tenía un recurrentes
ejemplo: [1,2,4,4,3,3,1,5,3]
de salida: [1,3,4]
Mi idea es crear una matriz. Y luego aprobada en la matriz está ordenada. Y luego usar sort
el método para recorrer, ya que se necesita tiempo para dos y el número a
y b
comparar igual y si result
no hay ningún puesto duplicado a
empujado hacia adentro.
Este es mi código:
actualización de 4,5 días
Gracias @ poco terco casquillo compañero señalaron el problema
function repeat(arr) {
var result = [];
arr.sort().reduce(function(a, b) {
if(a === b && result.indexOf(a) === -1) {
result.push(a);
}
return b;
});
return result;
}
//之前问题代码
function repeat(arr){
var result=[];
arr.sort().sort(function(a,b){
if(a===b&&result.indexOf(a)===-1){
result.push(a);
}
});
return result;
}
actualización de 3,23 días
Gracias @ puesta en envoltura método proporcionado por los estudiantes:
function repeat(arr){
var result = [], map = {};
arr.map(function(num){
if(map[num] === 1) result.push(num);
map[num] = (map[num] || 0) + 1;
});
return result;
}
Vale la pena mencionar que map[num] = (map[num] || 0) + 1
, de este código (map[num] || 0)
, si map[num]
la hay, entonces map[num]
1 0 + 1, y viceversa, con un toque muy personal inteligente.
Gracias @ Saotome Mizuho consejos sexuales proporcionados por:
// es6
let array = [1, 1, 2, 3, 3, 3, 4, 4, 5];
Array.from(new Set(array.filter((x, i, self) => self.indexOf(x) !== i)));
// es5
var array = [1, 2, 4, 4, 3, 3, 1, 5, 3];
array.filter(function(x, i, self) {
return self.indexOf(x) === i && self.lastIndexOf(x) !== i
});
es6 las ideas Comentario:
array.filter ((x, i, auto ) => self.indexOf (x)! ==)
devuelve una matriz de elementos que constituyen arrary repitiendo (N-1 o de retorno)
nuevo Conjunto ([iterable])
Devuelve una colección (elemento de repetición se incorpora en el presente documento)
Array.from ([iterable])
Devuelve una matriz (en el paso anterior se convierte en el conjunto de la matriz)
// ES5 las ideas Comentario:
Uso indexOf
y lastIndexOf
el elemento de determinación de avance y retroceso determina que el número no es el mismo (si el mismo número, entonces el método retorna dos i
son los mismos)
La tercera pregunta
Teniendo en cuenta algunos de los documentos (documentos), palabras (palabras), para encontrar todos los documentos en el documento todas las palabras presentes
Mi pensamiento es: el segundo parámetro es una matriz con join
la síntesis de una cadena, y luego forEach
transversal, respectivamente, la documentación es words
también usado join
cuerda sintética, utilizando el search
método para encontrar todos los documentos en que words
si se incluye arrStr
.
Este es mi código:
function findDocList(docs, arr) {
let arrStr = arr.join(""),
itemStr,
result = [];
docs.forEach(function(item) {
itemStr = item.words.join("");
if(itemStr.search(new RegExp(arrStr)) !== -1) {
result.push("文档" + item.id);
}
});
console.log(result);
}
findDocList(docs, ['hello']) //文档1,文档2,文档3
findDocList(docs, ['hello', 'world']) //文档1
cuarta pregunta
Lo que el resultado siguiente código?
var test = (function(a){
this.a = a;
return function(b){
return this.a + b;
}
}(function(a,b){
return a;
}(1,2)));
console.log(test(1));
Se puede ver, hay dos funciones de aplicación directa. La siguiente función de auto-ejecución se completó un pase de 1 de modo que la auto-ejecución de las funciones anteriores this.a=1
, en el que el this
punto window
. A continuación, la función de auto-ejecutable devuelve una función de la test
variable. La siguiente llamada test(1)
, esto corresponde a la aprobada en el return 1+1
modo 2 salidas.
La quinta pregunta
No ciclo, la creación de una matriz de longitud 100, y el valor de cada elemento es igual a su índice.
Si conoces Object.keys y Array.form , entonces esta pregunta básicamente nada difícil.
Respuesta:
Object.keys(Array.from({length:100}))
¡Hey! Esperar a la siguiente Array.form
ES5 ES6 no hacer, cómo lograr de?
El código:
Object.keys(Array.apply(null,{length:100}))
Si usted no sabe puede referirse aquí a explicar.
pregunta 6
Un números enteros si todo el mundo es simétrico, a continuación, esta cifra es el número simétrica. Así que por favor averiguar a través de 1 al número 10000 para todos los de simetría
Pienso, primeros números en una cadena, y luego usar una gran variedad de map
métodos para atravesar la cadena, la cadena se convierte en toda la matriz por separado, y luego llamar a la matriz reverse
método, y luego voltear la matriz join
en una cadena, y, finalmente, la inversión de contraste si la cadena y la cadena antes de dar la vuelta al igual que (método un poco estúpida, mira gran Dios ilumine):
function symmetric(){
var i=1,
str,
newStr,
result=[];
for(;i<1000;i++){
str=""+i;
newStr=result.map.call(str,function(item){
return item;
}).reverse().join("");
if(str===newStr){
result.push(+str);
}
}
return result;
}
La séptima pregunta
¿Cuál será el resultado siguiente código?
var myObject = {
foo: "bar",
func: function(){
var self = this;
console.log('outer func : this.foo' + this.foo);
console.log('outer func : self.foo' + self.foo);
(function(){
console.log('inner func : this.foo' + this.foo);
console.log('inner func : self.foo' + self.foo);
})();
}
};
myObject.func();
Este problema principalmente en el this
punto, personalmente creo que no es demasiado difícil, porque this
he estado totalmente contraído (mala sonrisa).
Este problema, entonces considerar quién para llamar a la función this
puntos a quién.
Función comenzado self=this
aquí this
es el punto myObject
, porque myObject.func()
, obviamente, myObject
lo que llaman, por lo que la primera dos frases console
de salida foo
son bar
.
La siguiente es una función de aplicación directa, ya sabes, ya que la ejecución de la función this
en circunstancias normales, todo el punto window
aquí no es una excepción, por lo que la tercera console
salida foo
es undefined
porque window
bajo foo
ninguna definición. La cuarta salida es self.foo
el self
es como se define anteriormente, self
es decir, myObject
de modo que aquí foo
es bar
.
Q8
Por favor, escriba las siguientes reglas de expresiones regulares de descripción detallada
/ ^ [1-9] {6} D $ D / ?? (0 [1-9] dd?).
/ ^ (1 [89] |. [2-9] D | 100) $ / I
/ ^ [W -] @ + [A-Z0-9 -] + ({[AZ] {2,6}}) $ {1,2} / I
Hey, soy más regular buena parte también considerado. Voy a explicar uno por uno, algunos regulares más difícil de expresar en palabras, tenemos la sensación de sentido de la misma.
La primera: En primer lugar ^
, en nombre de que está detrás de un montón de cosas para el principio $
representativo para acabar con ella delante de un montón de cosas aquí, lo que significa que con el fin (0[1-9]\d\d?)?[1-9]\d{6}\d?
para el comienzo y final de la cadena. Entonces a la primera media coincidente en paréntesis es la primera cadena a la segunda cadena de 0 1-9 0-9 tercera cadena cuarto de cadena opcional, cualquier coincidencia 1-9, entonces todo este contenido dentro de los paréntesis opcionales. Se refiere al significado de una primera cadena coincidente es entonces posterior 6 1-9 0-9 definitivo opcional cadena de cadena coincidente, cualquier partido 0-9.
Así ordenada es: 0 para el primer partido, el segundo 1-9, el tercer número es, en cuarto lugar opcional, cualquier partido número, y toda la parte delantera de la protuberancia puede ser tener Ninguno. 1-9 de la quinta parte (si no, luego cocinar lo anterior que, desde el primer conteo) y la parte posterior 6 es la cadena numérica opcional último dígito, y que es empezar y terminar.
Aquí está un ejemplo:
022 222 222 222 a true //
002 222 222 222 // false desde el segundo dígito 1-9
02222222222 // primer soporte último dígito o cifras más posteriores se omiten
0222222222 // último dígito primer soporte y por Por último, la parte digital omitiendo
22222222 // primeros soportes contenidos todos omite
02222222 // d {6} no está satisfecho.
Segundo: 1 como los primeros partidos, 8 o 9 como el segundo O a 2-9 como el primero, y el segundo número es la coincidencia de cadenas o 100, y al principio y al final de su caso se ignora.
ejemplo todavía más intuitivo:
18 // true. Partido 1 [89] anterior
23 es cierto // partido [2-9] D
100 @ verdadero partido 100
. 17 en false //
230 // en false
Tercero:
coincidente al menos un frente o un número o una letra, o _ - @ rematching continuación, coincide con al menos una letra o un número, o - y después para que coincida con la letra 2-6} {1-2, la cuerda y ignoran caso para el comienzo y el final.
Este uso del lenguaje para describir demasiado duro, no puedo hablar que, en un ejemplo:
. D @ {AW} 3 {} // AD a verdaderos
- @ - {ddd {}} // FS a verdadero
. 3. 3 @ {DW} {} // ddd a verdadero
.. 3 @ 3 en false // {DW} {cartas 2-6 es decir, un} a menos ({[a-z]{2,6}}){1,2}
detrás {1,2}
no se encuentran
@ 3 {dw} {ddd} // false [w -] + no cumplía el
33 {dw} {ddd} // falsa no @
DSA @ FFFF {DW} {D} / / falso ({[az] { 2,6}}) no cumple con el
noveno título
Por favor método de escritura molesto gama
actualización de 4,5 días
// 之前的问题代码
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1;
//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
var arr = [1, 2, 3, 4, 5];
arr.sort(randomsort);
pregunta 10
Escribe aplicación element.getElementsByClassName de
mis ideas: en primer lugar obtener todos los elementos en la página, y luego split
la pasó en múltiples class
dividida en una matriz, luego dos capas de interés para encontrar elementos de circulación cualificados (se sienten personalmente que este método es eficiente muy baja, cuando es algo, mensaje de bienvenida)
Código:
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
var ele = [],
tags = document.getElementsByTagName("*");
className = className.split(/\s+/);
for(var i = 0; i < tags.length; i++) {
for(var j = 0; j < className.length; j++) {
//如果这个元素上有这个class且没在ele里面(主要防止多个class加在一个元素上推进去两次的情况)
if(tags[i].className === className[j] && ele.indexOf(tags[i]) === -1) {
ele.push(tags[i]);
}
}
}
return ele;
}
}
título XI
Por favor salida de código de escritura
if(!("a" in window)){
var a = 1;
}
alert(a);
Este problema principalmente en la declaración de variables aumentan, cualquier (ES5 en) Declaración variable se eleva a la parte superior del ámbito actual. Así que aquí está el código que realmente es:
var a;
if(!("a" in window)){
a = 1;
}
alert(a);
Por lo tanto, antes de ejecutar la sentencia si a
ya está en el window
medio, por lo que habráatert undefined
título XII
Por favor salida de código de escritura
var handle = function(a){
var b = 3;
var tmp = function(a){
b = a + b;
return tmp;
}
tmp.toString = function(){
return b;
}
return tmp;
}
alert(handle(4)(5)(6));
Vamos a ver paso a paso: en primer lugar handle(4)
, a donde el programa empieza a correr, crear una tmp
función, mientras que la tmp
función del toString
método reescrito, y finalmente volver a esta tmp
función.
Nota : tmp
en el a
no pasar en 4, no se puso tmp
en a
y handle
la a
confunde, por lo que aquí pasa nada 4 seco.
A continuación, el segundo paso: handle(4)(5)
aquí es la implementación de una tmp
función, esta vez tmp
la función a
se pasa en el 5 * b
es el primer paso en la implementación de la función b
que es 3 (no sé por qué los estudiantes van a aprender a entender 3 de cierres it), Por último, este b
es equivalente a 8.
En la tercera sección se repite el segundo paso 8+6
, el último b
14, javascript
el motor llama automáticamente al último toString
para volver b
, por lo que el resultado es 14.
decimotercera título
javscript expresión del valor "[] == '' 'es, ¿por qué?
Este estudio de título de JS ==
entender operador, sabemos que ==
los operadores de ambos lados si el valor no es el mismo tipo de valor va a convertir a volver el mismo tipo de comparación. Esta pregunta izquierda es object
el tipo, la derecha es el string
tipo, convertirá la izquierda es string
para comparar el tipo, [].toString()
es decir, ''
por lo que el resultado final es true
.
título XIV
Js genera el código HTML siguiente, haga clic en cada li ...... cuando el pop, 2, 3
// li onclick caso puede estallar índice se hace clic en él actualmente =?
<ul id="testUrl">
<li>index=0</li>
<li>index=1</li>
</ul>
Esta pregunta directamente como se requiere para generar el HTML correspondiente, dan ul
eventos de unión utilizando detectores de eventos agente que recibió la orden, entonces la salida de su número de serie y el contenido correspondiente, nada difícil. Mi código:
var ul=document.createElement("ul"),
lis=[];
ul.id="testUrl";
for(var i=0,li;i<2;i++){
li=document.createElement("li");
li.innerHTML="index="+i;
ul.appendChild(li);
lis.push(li);
}
ul.addEventListener("click",function(e){
alert(lis.indexOf(e.target));
alert(e.target.innerHTML)
});
document.body.appendChild(ul);
título XV
Mapa de Nueva ES5 es necesaria para aumentar la ES5 método siguiente mapa ambiental
Personalmente pienso que mientras mapa método suficiente para entender, naturalmente salido del paquete. Hey, no me gusta no rocíe. Aunque hay un enlace a la aplicación map
método, pero usos ES5 es for in
inconsistente con el tema, por lo que mi código:
if(!Array.prototype.map){
Array.prototype.map=function(callback,context){
var len=this.length,
i=0,
result=[];
if (typeof callback !== "function") {
throw new TypeError(callback + " is not a function");
}
context=context||window;
for(;i<len;i++){
this[i]!==undefined?result.push(callback.call(context,this[i],i,this)):result.push(this[i]);
}
return result;
}
}
Pero mi código y la salida estándar el resultado fue un poco fuera de. No trato con eso undefined
y null
porque this[i]!==undefined
estos dos valores serán devueltos intactos. Sin embargo, algunas de las necesidades diarias todavía se pueden cumplir. Aceptamos sugerencias y Kazajstán.
Por último otra vez, tantas preguntas sobre este tema, con la esperanza de ser útil para todos, pero si hay algo mal por favor me corrijan, mensaje de bienvenida.
Además, les doy la bienvenida a los espectadores un paquete de bibliotecas AJAX alumbramientos .
referencia
JS disposición aleatoria interrumpido Métodos Resumen de
cómo no usar bucle de circulación, creando una matriz de longitud 100, y el valor de cada elemento es igual a su índice de
mapa MDN
Este artículo se reproduce en: mono 2048➻ https://www.mk2048.com/blog/blog.php?id=hhacc1hhiab