prefácio
Endereço Original && meu blog
sabe quase && sei quase colunas
Jane livros
Henan front-end cambial líquida Qunguan
Última escreveu um artigo alguns me impressionaram as perguntas da entrevista (a) não tenha visto os alunos podem ir oh.
A fonte do título do artigo: Existem mais de 20 das perguntas face frontal, com certeza você não vêm para ver o ponto? .
Se a pergunta acima neste artigo eu não mencioná-lo, ele mostra que alguns problemas podem ser facilmente obtidos ou verificação simples ou uma capacidade limitada eu não posso responder para fora. Se você não fizer isso e algumas das questões que eu não mencionou isso eu acho que é a capacidade limitada não pode responder fora dele. Hey hey hey. Brincadeira, mas você pode deixar uma mensagem abaixo Oh!
texto
Ou as regras antigas dar o tema, e depois olhar para a minha resposta, que conselho pode mencionar na placa da mensagem.
O que faz a, b, c, respectivamente, de saída?
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 diversos métodos para identificar os elementos recorrentes na matriz tinha
Por exemplo: [1,2,4,4,3,3,1,5,3]
Saída: [1,3,4]
Dado alguns dos documentos (documentos), palavras (palavras), para encontrar todos os documentos no documento todas as palavras 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
O que a seguinte saída 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));
Não ciclo, criando uma matriz de comprimento 100, e o valor de cada elemento é igual ao seu índice.
Um números inteiros se todo mundo é simétrica, então este número é o número simétrico. Então, por favor descobrir a partir de 1 para o número 10000 para todos simetria
A saída de código a seguir é o quê?
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, escreva as seguintes regras de expressão regular da descrição detalhada
/ ^ (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 array chateado write
Implementação de gravação element.getElementsByClassName
Por favor saída de código de escrita
if(!("a" in window)){
var a = 1;
}
alert(a);
Por favor saída de código de escrita
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));
expressão javscript do valor "[] == '' 'é, por quê?
Js gera o seguinte html, clique em cada li ...... quando pop, 2, 3
// li onclick evento pode aparecer índice está sendo clicado =?
<ul id="testUrl">
<li>index=0</li>
<li>index=1</li>
</ul>
Mapa de New ES5 é necessário para aumentar a ES5 seguinte método mapa ambiental
A resposta é revelada
A primeira pergunta
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 dar uma olhada em passo a passo. Em primeiro lugar, a=fun(0)
porque só passar um parâmetro, console
a saída é o segundo valor do parâmetro, é, sem dúvida, que a produção undefined
.
Então, para a.fun(1)
ser visto, em frente a esta frase está chamando fun(0)
a função retorna um objeto dentro da volta fun
, desta fun
vez fun(m,n)
retorna para fora. Desta vez Nota : este objeto é fun
chamado por um momento antes de voltar fun(m,n)
, ele console
será executado, você pode determinar, certamente não vai passar em saída de 1, porque 1 como o primeiro parâmetro passado fun(m,n)
, e a console
saída é o primeiro dois parâmetros. A saída, então, Shane?
Bem, nem todos adivinhação, a resposta é zero. Alguns podem perguntar, Nani? Para o cabelo é 0,0 vêm?
Para explicar o que quero, desde que você tenha um fechamento clara. Aqui fechamento usado. Sabemos que existe uma função de fechamento está fora do escopo de variáveis internas através de fechamento de funções de acesso. Na verdade, correndo a=fun(0)
tempo, return
objetos fora da função fun
no passado no 0 como o segundo parâmetro passado fun
para fora para dentro e, em seguida, retornar 0 foi salvo. Assim, quando o correr a.fun(1)
do tempo é realmente de saída antes de zero. Os dois também chama de volta e este princípio, o resultado final é 0.
Pode haver um pouco ao redor, ter tempo para olhar para si mesmos ou para depuração. (Eu venho tentando articular, e se ele não sabe se você deixar uma mensagem =. =).
Então, para b
, se ficar a conhecer aqui na frente dele não é difícil. fun(0)
tempo de execução será return
um objeto fora da parte traseira de uma série de chamadas encadeadas estão chamando a função retorna um objeto na frente fun
, resultando em saída éundefined 0 1 2
E finalmente para c
, se b
todos eles se conheçam, aqui basicamente nada mais difícil do. Respectivamente, será a saída undefined 0 1 1
.
Se você não entender, então eu sugiro pisar-lo, ainda não sei se você pode deixar uma mensagem abaixo, vou tentar o meu melhor para dar-lhe a capacidade de explicar.
A segunda questão
O uso do método achado como muitos elementos na matriz tinha uma recorrência
exemplo: [1,2,4,4,3,3,1,5,3]
Saída: [1,3,4]
Minha idéia é criar uma matriz. E depois passou na matriz está classificada. E então usar sort
o método para fazer uma iteração, porque leva tempo para dois e o número a
e b
comparar iguais e se result
não há qualquer put duplicado a
pressionado.
Este é meu código:
atualização 4,5 dias
Graças @ pouco teimosa cap colega apontou o 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;
}
atualização 3,23 dias
Graças @ iniciar-wrap método fornecido pelos alunos:
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 ressaltar que map[num] = (map[num] || 0) + 1
, deste código (map[num] || 0)
, se map[num]
houver, então map[num]
+1 0 + 1 e vice-versa, com um toque muito pessoal inteligente.
Graças @ Saotome Mizuho dicas excêntricas fornecida 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 ideias Comentário:
array.filter ((x, i, auto ) => self.indexOf (x)! ==)
retorna uma matriz de elementos repetidos que constituem arrary por (N-1 ou de retorno)
novo Conjunto ([iteráveis])
Devolve uma colecção (elemento de repetição é aqui incorporada)
Array.from ([iteráveis])
Devolve uma matriz (no passo anterior torna-se o conjunto da matriz)
// ES5 ideias Comentário:
Uso indexOf
e lastIndexOf
o elemento de determinação para a frente e reverso determina que o número não é a mesma (se o mesmo número, então o método retorna dois i
são o mesmo)
A terceira questão
Dado alguns dos documentos (documentos), palavras (palavras), para encontrar todos os documentos no documento todas as palavras presentes
Meu pensamento é: o segundo parâmetro é um array com join
a síntese de uma corda, e depois forEach
transversal, respectivamente, a documentação é words
também usado join
corda sintética, usando o search
método para encontrar todos os documentos onde words
se incluído arrStr
.
Este é meu 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
quarta questão
O que a seguinte saída 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));
Você pode ver, há dois função de auto-execução. A seguinte função de auto-execução é completada uma passagem 1, de modo que a auto-executar as funções acima this.a=1
, onde o this
ponto window
. Em seguida, a função de auto-execução retorna uma função para a test
variável. A chamada seguinte test(1)
, isto corresponde a um passado return 1+1
de modo saídas 2.
A quinta questão
Não ciclo, criando uma matriz de comprimento 100, e o valor de cada elemento é igual ao seu índice.
Se você sabe Object.keys e Array.form , então esta pergunta basicamente nada difícil.
Resposta:
Object.keys(Array.from({length:100}))
Hey! Esperar para a próxima Array.form
não ES6 fazer, como conseguir ES5 de?
O código:
Object.keys(Array.apply(null,{length:100}))
Se você não sabe pode consultar aqui para explicar.
pergunta 6
Um números inteiros se todo mundo é simétrica, então este número é o número simétrico. Então, por favor descobrir a partir de 1 para o número 10000 para todos simetria
Penso, primeiros números em uma string, e então usar uma variedade de map
métodos para atravessar a corda, a corda se torna a matriz separado, e depois chamar a matriz reverse
método, e em seguida, virar a matriz join
para uma cadeia, e, finalmente, a reversão de contraste se a cadeia ea cadeia antes de lançar o igual a (método um pouco estúpido, olhar grande Deus 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;
}
A sétima questão
Qual será a seguinte saída 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 no this
ponto de, pessoalmente, sinto que não é muito difícil, porque this
eu tenho sido totalmente contratada ele (mau sorriso).
Este problema, em seguida, considerar apenas que a chamada de função this
pontos para quem.
Função começou self=this
aqui this
é o ponto myObject
, porque myObject.func()
, obviamente, myObject
a coisa de chamá-lo, de modo que o primeiro duas frases console
de saída foo
são bar
.
O seguinte é uma função de auto-execução, você sabe, uma vez que a execução da função this
em circunstâncias normais todo o ponto window
aqui não é excepção, por isso, a terceira console
saída foo
é undefined
porque window
sob foo
nenhuma definição. A quarta saída é self.foo
o self
é como acima definido, self
isto é, myObject
por isso aqui foo
é bar
.
Q8
Por favor, escreva as seguintes regras de expressão regular da descrição detalhada
/ ^ [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
Ei, eu sou mais regular também considerada boa parte. Vou explicar um por um, algum regular mais difícil de expressar em palavras, sentimos sentido.
A primeira: Em primeiro lugar ^
, em nome do que é atrás de um monte de coisas para o início $
representante para acabar com ela na frente de um monte de coisas aqui, o que significa que, a fim (0[1-9]\d\d?)?[1-9]\d{6}\d?
para o início e fim da cadeia. Em seguida, para o primeiro meio de correspondência entre parênteses é a primeira cadeia para a segunda corda 0 1-9 0-9 terceira cadeia opcional quarta corda, qualquer correspondência 1-9, então este conteúdo inteiro dentro dos parênteses opcionais. Respeita o significado por trás de uma primeira cadeia correspondente é então de volta junho 1-9 0-9 final, opcional string string correspondência, qualquer jogo 0-9.
Então arrumado é: 0 para o primeiro jogo, o segundo 1-9, o terceiro número é, em quarto lugar opcional, qualquer jogo número; e toda a frente do nódulo pode ter ser Nenhum. 1-9 do quinto (se não, em seguida, cozinhe o que precede que, a partir da primeira contagem) e as costas 6 é o último dígito seqüência numérica opcional, e é para começar e terminar.
Aqui está um exemplo:
022 222 222 222 para true //
002 222 222 222 // como falsa uma vez que o segundo dígito 1-9
02222222222 // primeiro suporte último dígito ou figuras mais recuados são omitidos
0222222222 // último dígito primeiro suporte e por finalmente, a parte digital omitindo
22222222 // primeiros conteúdos suportes omitidos
02222222 // d {6} não está satisfeito.
Segunda: 1, tal como os primeiros partidas, 8 ou 9 como o segundo ou para 2-9 como o primeiro, e o segundo número é a correspondente cadeia ou 100, e no início e no fim da sua caso é ignorado.
exemplo ainda mais intuitiva:
18 // verdadeiro jogo precedente. 1 [89]
23 é verdadeiro // partida [2-9] D
100 @ verdadeiro jogo 100
. 17 a falso //
230 // a falsa
Terceiro:
correspondência pelo menos uma frente ou um número ou letra, ou _ - @ rematching seguida, corresponde a pelo menos uma letra ou número, ou - e, em seguida, para coincidir com a letra 2-6} {1-2, a corda e eles ignoram caso para o início eo fim.
Esta linguagem uso para descrever muito difícil, eu não posso falar, em um exemplo:
. D @ {AW} 3 {} // AD aos verdadeiros
- @ - {ddd {}} // FS para true
. 3. 3 @ {DW} {} // ddd para true
.. 3 @ 3 a falsa // {DW} {letras 2-6 isto é, um} um menos ({[a-z]{2,6}}){1,2}
atrás {1,2}
não se encontram
@ 3 {dw} {ddd} // falso [w -] + não satisfazer o
33 {dw} {ddd} // falsa não @
DSA @ FFFF {DW} {D} / / false ({[az] { 2,6}}) não cumpre a
nono título
Por favor método de array chateado write
atualização 4,5 dias
// 之前的问题代码
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);
pergunta 10
Escrever implementação element.getElementsByClassName de
minhas idéias: primeiro obter todos os elementos na página, e em seguida, split
o passado em múltiplos class
dividida em uma matriz, em seguida, duas camadas de interesse para encontrar elementos de circulação qualificado (pessoalmente acho que este método é eficiente realmente baixo, quando é algo, mensagem de boas vindas)
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;
}
}
XI título
Por favor saída de código de escrita
if(!("a" in window)){
var a = 1;
}
alert(a);
Este problema principalmente na declaração de variáveis aumentam, qualquer variável (ES5 in) declaração será aumentado para o topo do escopo atual. Então aqui está o código realmente é:
var a;
if(!("a" in window)){
a = 1;
}
alert(a);
Então, antes de a instrução é executada, se a
ele já está no window
meio, de modo que haveráatert undefined
título Twelfth
Por favor saída de código de escrita
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 ver passo a passo: primeiro handle(4)
, para onde o programa começa a funcionar, crie uma tmp
função, enquanto a tmp
função do toString
método reescrito e, finalmente, voltar a esta tmp
função.
Nota : tmp
na a
não passar em 4, não coloque tmp
no a
e handle
do a
confuso, então aqui passar 4 nada seco.
Em seguida, o segundo passo: handle(4)(5)
aqui é a implementação de uma tmp
função, desta vez tmp
a função a
é passada na 5 * b
é o primeiro passo na implementação da função b
que é de 3 (não sei por que os alunos vão aprender a entender 3 de encerramentos de TI), finalmente, este b
é equivalente a 8.
A terceira seção repete o segundo passo 8+6
, o último b
14, javascript
o motor chama automaticamente o último toString
a voltar b
, então o resultado é 14.
Décimo terceiro título
expressão javscript do valor "[] == '' 'é, por quê?
Este exame título de js ==
entender operador, sabemos ==
operadores de ambos os lados, se o valor não é o mesmo tipo de valor irá convertê-los para voltar no mesmo tipo de comparação. Esta questão esquerdo é object
tipo, o direito é o string
tipo, ele irá converter a esquerda é string
para comparar o tipo, [].toString()
isto é, ''
de modo que o resultado final é true
.
título XIV
Js gera o seguinte html, clique em cada li ...... quando pop, 2, 3
// li onclick evento pode aparecer índice está sendo clicado =?
<ul id="testUrl">
<li>index=0</li>
<li>index=1</li>
</ul>
Esta questão diretamente como necessário para gerar o código HTML correspondente, dar ul
eventos de ligação usando ouvintes de eventos agente que foi encomendado, então a saída do seu número de série e o conteúdo correspondente, nada difícil. Meu 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);
XV título
Mapa de New ES5 é necessário para aumentar a ES5 seguinte método mapa ambiental
Pessoalmente, penso que, enquanto mapa método suficiente para entender, virão naturalmente fora do pacote. Ei, não como não spray. Embora não haja um link para uma implementação map
método, mas usos ES5 é for in
inconsistente com o assunto, então o meu 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;
}
}
Mas meu código e saída padrão o resultado foi um pouco fora. Eu não lidar com isso undefined
e null
, porque this[i]!==undefined
estes dois valores será devolvido intacto. No entanto, algumas necessidades diárias ainda podem ser cumpridas. Congratulamo-nos com sugestões e Cazaquistão.
Finalmente acabou, tantas perguntas sobre esta questão, na esperança de ser útil para todos, mas se há algo errado por favor me corrigir, mensagem de boas vindas.
Além disso, eu recebê-lo para os espectadores um pacote AJAX de bibliotecas iluminações .
referência
JS matriz aleatória interrompido Métodos de Síntese
como não usar circuito de circulação, criando uma matriz de comprimento 100, e o valor de cada elemento é igual ao seu índice de
MDN mapa
Este artigo é reproduzido em: macaco 2048➻ https://www.mk2048.com/blog/blog.php?id=hhacc1hhiab