Por inúmeras solicitações, execute uma série lições de javascript.. Se você é resolutamente configurado, mestre JS, significa que você tem que ter conhecimento básico de HTML e CSS, pois esta é uma base, sem a qual é difícil entender o que falaremos.
Do nosso lado, tentarei explicar a linguagem compreensível, mostre em exemplos reais da vida, porque tudo está chegando em comparação.
O que é JavaScript, ou como entender, para que propósito é necessário durante o desenvolvimento da Web!
Vivemos em um mundo onde todos são tangíveis, estamos implementando essas idéias que vêm à nossa cabeça. Nós construímos casas, carros, movendo-se com várias técnicas. Isto é, o que podemos fazer no mundo real pode ser representado em comparação com o HTML, onde ele atua como material de construção, a fundação, na qual tudo mantém, e quando ajuda CSS. Fazemos este mundo, tornamos colorido, como eles queriam vê-lo sozinho.
Provavelmente você se pergunta se html e css é o que nos rodeia, então o que é javascript? Onde ele se manifesta em nosso mundo.
Simplesmente, acho que explicará sobre o exemplo do filme Gary Lots, acho que muitos de vocês olhavam e entendem o que estamos falando. De acordo com o roteiro do filme, sabemos que Gary possuía sobre as habilidades, ele era um mago, e uma varinha mágica ajudou nisso. Foi a varinha mágica que lhe deu a oportunidade de criar magia, tal nível como ele possuía conhecimento para torná-lo único.
JavaScript é uma varinha mágicaIsso tem todos os desenvolvedores da web, mas que mágica você pode criar, depende apenas do conhecimento do desenvolvedor com o qual ele possui. Aqueles que dominaram essa linguasão magos e maravilhas curly.
Linguagem javascript. Não cumprido sem seus componentes HTML e CSS. Muitos programadores mencionam três idiomas formando "camadas" de uma página da Web: HTML, CSS e JavaScript.
Html. A primeira língua da marcação de hipertexto - fornece camadas estruturais, organizando expressivamente o conteúdo da página, como texto, imagem outros elementos.
Segundo, CSS. (Folhas de estilo cascading) decoração bonita, aparência do conteúdo HTML.
E o terceiro Javascript. - Adicione camadas comportamentais, revivendo a página da Web, tornando-a interativa, ou seja, criando elementos para interagir com os visitantes.
Como resultado, para dominar a linguagem JavaScript, você deve ter uma boa ideia de HTML e CSS.
A programação pode parecer incrível magia, inacessível para simples mortal. No entanto, a maioria de seus conceitos não é difícil de entender. JavaScript é bastante amigável em relação aos programadores novatos, mas, no entanto, é mais difícil do que HTML ou CSS, por isso, dentro da estrutura da série de lições, dominaremos os conceitos fundamentais de programação, e você pode aplicá-los ao escrever scripts em Javascript.
Você vai se familiarizar com novos símbolos () ,, , () ,!, aprenda a designação de novas palavras (var, , mais se), analisaremos as regras de pontuação e a sintaxe da própria língua, e tudo isso para criar sua magia.
Material preparado Denis gravado, escreva seus comentários e certifique-se de compartilhar este material com seus amigos.
- Transferir
O material, a tradução dos quais publicamos hoje, é dedicada ao básico do JavaScript e destina-se a programadores iniciantes. Pode ser visto como um pequeno livro de referência sobre designs básicos de JS. Aqui nós, em particular, vamos falar sobre o sistema de tipo de dados, sobre variáveis, matrizes, recursos, sobre protótipos de objetos e algumas outras características do idioma.
Tipos de dados primitivos
JavaScript tem os seguintes tipos de dados primitivos: número, booleano, string, indefinido, nulo. Imediatamente, deve-se notar que, ao trabalhar com tipos de dados primitivos, por exemplo, com literais de string, nem nos tornamos uma conversão explícita, podemos acessar seus métodos e propriedades. O fato é que ao tentar executar essas operações, os literais são automaticamente equipados com um invólucro de objeto apropriado.▍ Folha
JavaScript tem apenas um tipo de números - esses são os números de precisão dupla com um ponto flutuante. Isso leva ao fato de que os resultados de calcular algumas expressões aritmeticamente incorretas. Você já pode saber que em JS o valor da expressão 0,1 + 0,2 não é igual a 0,3. Ao mesmo tempo, ao trabalhar com inteiros, esses problemas não são observados, ou seja, 1 + 2 \u003d\u003d\u003d 3.O JavaScript tem um objeto numérico, que é um invólucro de objeto para valores numéricos. Objetos numéricos podem ser criados usando o comando VAR A \u003d Number (10), ou você pode confiar no comportamento automático do sistema descrito acima. Isso, em particular, permite chamar métodos armazenados em número.Prototype em aplicado a literais numéricos:
(123) .Tring (); // "123" (1,23) .TOFixed (1); //"1.2 "
Existem funções globais projetadas para converter outros tipos de valores em um tipo numérico. É Parseint (), parsefloat () e o design number (), que neste caso atua como uma função convencional que realiza a conversão de tipos:
Parseint ("1") // 1 parseint ("texto") // nan parsefloat ("1.234") //1.234 número ("1") // 1 número ("1.234") //1.234
Se durante a operação com números, desativa algo que não é um número (durante alguns cálculos, ou ao tentar converter nada para o número), o JavaScript não irá dar um erro, mas apresentará o resultado de uma operação similar como NAN ( não-um número, não número). Para verificar se o valor NAN é usado, você pode usar a função ISNAN ().
Operaçoes aritimeticas JS funciona bastante familiar, mas é necessário prestar atenção ao fato de que o operador + pode realizar a adição de números e concatenação de seqüências de caracteres.
1 + 1 //2 "1" + "1" //"11" 1 + "1" //"11"
▍ derrame.
Linhas em javascript são seqüências de caracteres Unicode. Os literais de string criam, entrando no texto a ser colocado neles, em cotações duplas (") ou únicas (" "). Como já mencionado, ao trabalhar com literais de string, podemos confiar no invólucro de objeto correspondente, no protótipo dos quais existem muitos métodos úteis, entre eles - Substring (), IndexOf (), Concat (). "Texto" .Substring (1,3) // Ex "texto" .Indexof ("x") // 2 "texto" .Concat ("end") // final de texto
Linhas, como outros valores primitivos, imutabelins. Por exemplo, o método Concat () não modifica a string existente e cria um novo.
▍ Valores lógicos.
O tipo de dados lógico em JS é representado por dois valores - verdadeiro e falso. A linguagem pode converter automaticamente vários valores para o tipo de dados lógico. Então, falso, além do valor lógico falso, são nulos, indefinidos, "(string vazia), 0 e nan. Tudo o mais, incluindo objetos, é valores verdadeiros. Em andamento operações lógicas Tudo o que é considerado verdadeiro é convertido como verdadeiro, e tudo o que é considerado falso é convertido em falso. Dê uma olhada no exemplo a seguir. De acordo com os princípios acima, a cadeia vazia será convertida em falso e como resultado da execução deste código no console, a linha disso é falsa cairá no console.Deixe o texto \u003d ""; If (texto) (console.log ("isso é verdade");) mais (console.log ("isso é falso");)
Objetos
Objetos são estruturas dinâmicas que consistem em um par de valor chave. Os valores podem ter tipos de dados primitivos, podem ser objetos ou funções.Objetos são mais fáceis de criar usando a sintaxe literal de objeto:
Deixe Obj \u003d (Mensagem: "Uma mensagem", Dosomething: Função () ())
As propriedades do objeto podem ser, a qualquer momento, ler, adicionar, editar e excluir. É assim que se faz:
- PROPRIEDADES DE LEITURA: Object.name, objeto.
- Registre dados para propriedades (se a propriedade para que não existir, não existir, uma nova propriedade com a chave especificada é adicionada): Object.name \u003d valor, objeto \u003d valor.
- Excluir Propriedades: Excluir Object.name, Excluir objeto.
Deixe Obj \u003d (); // criando um objeto vazio obj.message \u003d "uma mensagem"; // Adicionando uma nova propriedade Obj.Message \u003d "uma nova mensagem"; // edição de exclusão objeto.message Properties; // Excluir propriedade.
Objetos no idioma são implementados na forma de tabelas de hash. Você pode criar uma tabela de hash simples usando o comando objeto.create (null):
Deixe francês \u003d objeto.Create (nulo); Francês ["sim"] \u003d "oui"; Francês ["não"] \u003d "não"; Francês ["sim"]; // "oui"
Se o objeto precisar ser imutável, você poderá usar o comando Object.Freeze ().
Para enumerar todas as propriedades do objeto, você pode usar o comando object.keys ():
Função LogProperty (nome) (console.log (nome); // nome da propriedade console.log (obj); // valor da propriedade) objeto.keys (obj).
▍Cap Os valores de tipos e objetos primitivos
Para trabalho prático Com valores primitivos, já foi dito, para percebê-los como objetos que têm propriedades e métodos, embora não sejam objetos. Valores primitivos imutáveis, a estrutura interna dos objetos pode variar.Variáveis.
Em JavaScript, as variáveis \u200b\u200bpodem ser anunciadas usando as palavras-chave VAR, LET e CON.Ao usar a palavra-chave VAR, você pode declarar uma variável e, se necessário, inicializá-la com um determinado valor. Se a variável não for inicializada, seu valor é indefinido. Variáveis \u200b\u200bdeclaradas usando a palavra-chave var têm um escopo funcional.
A palavra-chave deixa é muito semelhante ao VAR, a diferença é que as variáveis \u200b\u200bdeclaradas com a palavra-chave deixam um escopo de bloco.
O escopo de visibilidade também tem variáveis \u200b\u200bdeclaradas usando a palavra-chave consts, que, dado que os valores de tais variáveis \u200b\u200bnão podem ser alterados, chamarão corretamente as "constantes". A palavra-chave consts "congela" O valor da variável declarada com seu uso pode ser comparado com o método Object.Freeze (), "Congelando" objetos.
Se a variável for declarada fora de qualquer função, seu escopo é global.
Matrizes.
As matrizes de JavaScript são implementadas usando objetos. Como resultado, falando de matrizes, realmente discutimos objetos semelhantes aos arrays. Você pode trabalhar com os elementos da matriz usando seus índices. Índices numéricos são convertidos em strings e são usados \u200b\u200bcomo nomes para acessar os valores de matrizes. Por exemplo, o desenho do tipo de AR é semelhante ao desenho do ARR ["1"], e o outro dará acesso ao mesmo valor: arr \u003d\u003d\u003d ARR ["1"]. De acordo com o precedente, uma matriz simples declarou a saída ARR \u003d ["um" comando, B "," C "], parece ser a seguinte: ("0": "a", "1": "B", "2": "c")
Removendo os elementos da matriz usando o comando Excluir deixa "furos" nele. Para evitar esse problema, você pode usar o comando splice (), mas funciona lentamente, desde então, depois de remover o item, ele move os elementos restantes da matriz, de fato, mudando-os para o início da matriz, esquerda .
Deixe o ARR \u003d ["A", "B", "C"]; Excluir o arr; Console.log (arr); // ["a", vazio, "c" console.log (arr.Length); // 3.
Os métodos de matrizes facilitam a implementação de tais estruturas de dados como pilhas e filas:
// pilha deixe a pilha \u003d; stack.push (1); // stack.push (2); // deixe a última \u003d stack.pop (); // console.log (último); // 2 // fila Deixe a fila \u003d; fila.push (1); // Queue.push (2); // deixe primeiro \u003d fila.shift (); // console.log (primeiro); // 1
Funções
Funções em javascript são objetos. As funções podem ser atribuídas a variáveis, armazenadas em objetos ou matrizes, transmitem para outras funções na forma de argumentos e retornam de outras funções.Existem três maneiras de declarar funções:
- Declaração de função ou declaração de função).
- Usando expressões funcionais (expressão de função), que também são chamadas de literais funcionais (fundamentais).
- Usando a sintaxe das funções de disparo (função de seta).
▍ Função do anúncio clássico.
Com esta abordagem para a declaração de funções, as seguintes regras se aplicam:- A primeira palavra-chave na função da linha de declaração é a função.
- As funções devem atribuir um nome.
- A função pode ser usada no código que é antes de ser feita pelo mecanismo de levantar a declaração de função na parte superior do escopo de visibilidade em que é declarado.
Função Dosomething () ()
▍ Expressões funcionais
Ao usar expressões funcionais, você precisa considerar o seguinte:- A palavra-chave da função não é mais a primeira palavra na função de linha de recurso.
- A presença de um nome para uma função é opcional. É possível usar expressões funcionais anônimas e nomeadas.
- Comandos de chamada Tais funções devem seguir os comandos de seus anúncios.
- Esse recurso pode ser iniciado imediatamente após o anúncio, usando a sintaxe iife (imediatamente invocada a expressão de função - imediatamente chamada de expressão funcional).
Deixe Dosomething \u003d Função () ()
▍ Funções de alongamento
As funções de seta, de fato, podem ser consideradas "açúcar de sintaxe" para criar expressões funcionais anônimas. Deve-se notar que tais funções não têm entidades próprias e argumentos. O anúncio da função de seta parece com isso:Deixe Dosomething \u003d () \u003d\u003e ();
Promoções para chamar funções
Funções podem ser chamadas de várias maneiras.Chamada de função normal.
Dosomething (argumentos)Função de chamada como um método de objeto
TheObject.Dosomething (argumentos) TheObject ["Dosomething"] (argumentos)Função de chamada na forma de um designer
New Dosomething (argumentos)Chamando uma função usando o método Aplicar ()
Dosomething.Aplicy (TheObject,) Dosomething.Call (TheObject, Arguments)Chamando uma função usando o método BIND ()
Deixe DosomethingWithObject \u003d Dosomething.bind (TheObject); DosomethingWithObject ();As funções podem ser chamadas com um número grande ou menor de argumentos do que o número de parâmetros especificados quando os declarou. Durante a operação da função "Excesso", os argumentos serão simplesmente ignorados (embora a função tenha acesso a eles), os parâmetros ausentes receberão indefinidos.
Funções têm dois parâmetros pseudo: este e argumentos.
▍ palavra de casamento este
A palavra-chave deste é um contexto de função. O valor para o qual indica depende de como a função foi causada. Isso é o que os valores assumem a palavra-chave disso, dependendo do método de chamar a função (eles, com exemplos de código, cujos desenhos são aqui usados \u200b\u200bsão descritos acima):- Chamada de função normal - janela / indefinida.
- Função de chamadas como um método de objeto - TheObject.
- Chamando uma função na forma de um designer - um novo objeto.
- Chamando uma função usando o método Aplicar () - TheObject.
- Chamando uma função usando o método BIND () - TheObject.
▍ Argumentos de palavra de casamento
Argumentos A palavra-chave é um pseudoparameter que dá acesso a todos os argumentos usados \u200b\u200bao chamar uma função. Parece uma matriz, mas não é uma matriz. Em particular, ele não tem métodos de matriz.Função Reducetesum (total, valor) Soma de função () (Deixe Args \u003d Array.Prototype.slice.call (argumentos); return args.Reduce (reducetosum, 0);) soma (1,2, 3);
Uma alternativa para a palavra-chave Argumentos é a nova sintaxe dos parâmetros restantes. No exemplo a seguir, Args é uma matriz contendo tudo o que é transmitido ao chamar.
Soma de função (... Args) (Devolver Args.Reduce (Reducetosum, 0);)
▍ Retorno do operador.
A função em que a expressão de retorno está faltando, retornará indefinida. Usando a palavra-chave de retorno, preste atenção em como o mecanismo da inserção automática dos trabalhos de ponto-e-vírgula. Por exemplo, a seguinte função não retornará um objeto vazio, mas indefinido:Função getObject () (return ()) getObject ()
Para evitar esse problema, o suporte de abertura deve ser colocado na mesma linha na qual a declaração de retorno está localizada:
Função GetObject () (Return ())
Digitação dinâmica
JavaScript é uma linguagem com digitação dinâmica. Isso significa que os valores específicos têm tipos, e as variáveis \u200b\u200bnão são. Durante a execução do programa na mesma variável, você pode registrar valores tipos diferentes. Aqui está um exemplo de uma função que funciona com diferentes tipos:Log de função (valor) (console.log (valor);) log (1); log ("texto"); log ((mensagem: "texto"));
Para esclarecer o tipo de dados armazenados em uma variável, você pode usar o operador tipoof ():
Seja n \u003d 1; Tipo de (n); // número permite s \u003d "texto"; Tipo de (s); // string permite fn \u003d função () (); Tipo de (fn); // função.
Modelo de fluxo único de execução
O ambiente de execução do JavaScript é simples. Isso, em particular, é expresso na impossibilidade de realizar simultaneamente duas funções (se não levar em conta as possibilidades de execução assíncrona do código que não afetamos aqui). No ambiente de execução, há uma chamada fila de evento (fila de eventos), que armazena a lista de tarefas a serem processadas. Como resultado, o problema dos problemas de bloqueio de recursos mútuos é incomum para um esquema de uma única floração de execução de JS, portanto, não há mecanismo de bloqueio. No entanto, o código que cai na fila dos eventos deve ser executado rapidamente. Se você sobrecarregar com o trabalho pesado, no aplicativo do navegador, o fluxo principal, a página do aplicativo não responderá à exposição ao usuário e o navegador irá oferecer para fechar esta página.Manipulação de exceção
JavaScript tem um mecanismo para manuseio de exceção. Funciona de acordo com bastante ordinários para tais mecanismos, o princípio: um código que pode causar um erro é composto usando o design Tente / Catch. O código em si está na unidade Experimente, os erros são processados \u200b\u200bno bloco de captura.É interessante notar que às vezes JavaScript, se você tiver situações freelance, não emitirá mensagens de erro. Isso se deve ao fato de que o JS não jogou erros antes de adotar o padrão ECMAScript 3.
Por exemplo, no próximo fragmento do código, uma tentativa de alterar o objeto "congelado" falha, mas a exceção não será emitida.
Deixe Obj \u003d Object.Freeze (()); Obj.message \u003d "texto";
Alguns dos erros de JS "silenciosos" são manifestados no modo rigoroso, você pode transformá-lo em usar o design "Usar estrito"; .
Sistema de protótipos
A base de tais mecanismos JS como designers de funções, o comando object.create (), a palavra chave de classe é o sistema de protótipos.Considere o seguinte exemplo:
Deixe Service \u003d (Dosomething: Função () ()) Deixe especializadoService \u003d Object.Create (serviço); Console.log (especializadoservice .__ proto__ \u003d\u003d\u003d serviço); // Verdadeiro.
Aqui, para criar um objeto especializadoService, cujo protótipo é necessário fazer o objeto Object.Create (). Como resultado, acontece que o método dosomething () pode ser chamado entrando em contato com o objeto especializadoService. Além disso, isso significa que a propriedade __proto__ do objeto especializadoService indica o objeto de serviço.
Crie agora um objeto semelhante usando a palavra-chave de classe:
Serviço de aula (Dosomething ()) Classe SpecializedService Extende o serviço () permite especializadoService \u003d novo especializadoservice (); Console.log (especializadoservice .__ proto__ \u003d\u003d\u003d especializadoservice.prototipo);
Os métodos declarados na classe de serviço serão adicionados ao objeto Service.Prototype. As instâncias de classe de serviço terão o mesmo protótipo (Service.Prototype). Todas as instâncias delegarão chamadas de chamadas para o objeto Service.Prototype. Como resultado, acontece que os métodos são declarados apenas uma vez, em Service.Prototype, após o qual eles são "herdados" por todas as instâncias da classe.
▍ Protótipos de ecllosure.
Objetos podem ser "herdeiros" de outros objetos. Cada objeto tem um protótipo, cujos métodos estão disponíveis para ele. Se você tentar se referir à propriedade que não está no próprio objeto, o JavaScript começará a procurar a cadeia protótipo. Este processo continuará até que a propriedade seja encontrada, ou até que a pesquisa atinja o final da cadeia.Em programação funcional em JavaScript
DENTRO Funções JavaScript são objetos de primeira classe, a linguagem suporta o mecanismo de fechamentos. Isso abre a maneira de implementar os métodos de programação funcional em JS. Em particular, estamos falando sobre a possibilidade de aplicar funções de ordem superior.O fechamento é uma função interna que tem acesso a variáveis \u200b\u200bdeclaradas dentro da função pai, mesmo após a função parental ser cumprida.
A função de ordem mais alta é uma função que é capaz de tomar outras funções como argumentos, funções de retorno ou ambos.
Programação funcional em JS é destacada em uma variedade de publicações. Se é interessante para você - aqui estão alguns materiais sobre este tópico dedicado a
Tutorial de sintaxe JavaScript.
Antes de você começar a ler tutorial JavaScript.Você deve ter conhecimento de software.
Será uma grande vantagem em aprender a sintaxe JavaScript se você já estiver familiarizado com qualquer linguagem de programação, como PHP, C ou Pascal, e também entender qual variável, tipo de dados, função ou uma matriz.
No entanto, se você não estiver familiarizado com os idiomas de programação, não vale a pena se preocupar, dado livro de texto Javascript. Apenas e é projetado para aqueles que primeiro procedem ao estudo da programação.
JavaScript (Javascript) - Esta é uma linguagem de programação de clientes, que pode ser controlada por elementos de página HTML (tags HTML) e um navegador da Web, forçá-los a mover, responder a vários eventos (cliques do mouse, pressionamento de teclado), criar muitos programas interessantes ( Scripts): Testes, animação, galerias de fotos (por exemplo, em vkontakte), jogos e muito mais.
Como é o estudo do JavaScript?
Estudar linguagem javascript.geralmente é dividido em quatro etapas:
1. Sintaxe de JavaScript. (este tutorial),
2. Estude Dom. e Bomba.,
3. Dom e controle de BOM usando JavaScript,
4. Estudando várias bibliotecas JavaScript. jquery. - o mais popular em este momento biblioteca (JQuery Textbook deve aparecer neste site no final de 2015).
Dom é o modelo de objeto do documento. Graças à tecnologia DOM, as tags de páginas HTML começam a representar os objetos de objetos e cada objeto nesta árvore, há um endereço único. A linguagem Javascript Referindo-se a este endereço pode acessar a uma tag HTML específica e gerenciá-la (alterar cor, tamanho, posição e mn. Dr.).
O BOM é um modelo de documento do navegador. A estrutura é a mesma que o DOM, apenas em vez dos objetos de página HTML, são os objetos do navegador: janela do navegador, tamanhos da tela do navegador, histórico de visitas, string de status, etc.
Depois de aprender o DOM e o BOM, eles começam a criar scripts mais ou menos complexos no JavaScript interagindo com a página e navegador.
Então, ter dominado um pouco, estudar alguma biblioteca JavaScript, como JQuery, graças a ela, você pode criar os mesmos programas que no JavaScript, apenas muito mais rápido e mais eficiente.
Alguns webmasters começam imediatamente a estudar o jQuery, ignorando os três estágios anteriores, mas eu não recomendo isso, porque em qualquer caso você precisa entender a sintaxe do JavaScript e conheça os objetos DOM / BOM de suas propriedades, métodos e destinos.
Quais programas podem ser escritos usando o JavaScript
Usando você pode criar muitos programas interessantes (scripts):
- Você pode criar scripts que alterem os elementos da página do site ou sua localização, pressionando um ou outro botão,
- Você pode criar uma animação,
- manipular formas, como verificar os dados inseridos pelo usuário,
- criar vários testes, como o tipo de ege (exames escolares) e obter imediatamente o resultado,
- Graças ao BOM, você pode descobrir as características do navegador e o computador do computador que você visitou seu site, que permite criar vários medidores visitantes,
- Com JavaScript, você pode criar até jogos, desenhos animados e muitos outros programas interessantes e úteis.
Qual é o propósito deste tutorial em JavaScript?
Finalidade disso livros Javascript. é te ensinar básico de sintaxe JavaScript., introduzir programação e conceitos como variáveis, tipos de dados, operações, operadores de ramificação, funções, ciclos, matrizes, objetos, etc. Tudo isso é encontrado em outras linguagens de programação, portanto, ter dominado JavaScript, você será muito mais fácil de aprender outras línguas, como PHP, C ++ ou Python.
Estrutura do livro de texto Javascript.
DENTRO livro didático no javascript.Os seguintes tópicos e lições serão considerados.
JavaScript - entra no jogo quando precisamos fazer algumas etapas no lado do cliente, que abordou nossa página da Web.
O JavaScript pode alterar a página da Web sem acessar o servidor, verifique os valores do usuário de dados inserido e execute qualquer outra operação.
Este artigo contém informações básicas que permitirão que você comece a usar o JavaScript.
Inserindo o script diretamente para o código da página
Você pode inserir o código JS diretamente dentro da página.
Remoção de código em um arquivo separado
Pode ser submetido Código Javascript. para o arquivo externo e usar o link para ele na página
A etiqueta de fechamento neste caso é necessária.
Melhor insira scripts na frente da tag de fechamento