3. O tipo é originário do JavaScript e pertence ao JavaScript.
Na verdade, é necessário quelinguagem de programação avançada seja convertida em instruções de máquina finais. , não importa se o JavaScript que escrevemos é entregue ao navegador ou à execução do nó, no final ele precisa ser executado pela CPU, então precisamos do mecanismo JavaScript para nos ajudar a traduzir o código JavaScript em instruções da CPU para executar
Aqui consideramos o WebKit como a coluna.
WebCore: Responsável pela análise de HTML, layout, renderização e outros trabalhos relacionados
JavaScriptCore: análise e execução de ambiente de variável de código JavaScript
objeto variável VO (Variable Object) No padrão ECMA mais recente, VO já possui outro nome para o ambiente variável VE
GO (Clobal Object) objeto global e contexto de execução global
AO (Activation Objece). ) inclui
alocará memória para nós ao definir variáveis
JS aloca memória para tipos de dados básicos diretamente no espaço de pilha durante a execução;
A alocação de memória do JS para tipos de dados complexos abrirá um espaço na memória heap e se referirá à variável de valor de retorno do ponteiro
porque o tamanho da memória é limitado , portanto, quando a memória não for mais. necessário, precisamos liberá-lo para liberar mais espaço de memória.
A coleta de lixo em inglês é Garbage Collection ou GC.
Para objetos que não são mais usados, nós os chamamos de lixo. Eles precisam ser reciclados para liberar mais espaço de memória. Nosso ambiente de tempo de execução de linguagem, como o ambiente de tempo de execução Java JVM e o mecanismo js do ambiente de tempo de execução JavaScript, irá coletar lixo de memória.
você vê que GC na verdade se refere ao coletor de lixo
é a definição de fechamento na ciência da computação (Wikipedia):
Closure (Inglês: Closure), também conhecido como fechamento lexical (Lexical Closure) ou fechamento de função (fechamento de função);
É uma tecnologia que implementa ligação lexical em linguagens de programação que suportam funções de primeira classe;
Na implementação, o encerramento é uma estrutura que armazena uma função e um ambiente associado (equivalente a uma tabela de consulta de símbolos);
A maior diferença entre um encerramento e uma função é que quando um encerramento é capturado, suas variáveis livres serão determinadas no momento da captura, para que ele possa ser executado normalmente mesmo que esteja fora de contexto no momento da captura
. o conceito de fechamento apareceu na década de 1960. O primeiro programa a implementar fechamentos foi o Scheme, então podemos entender por que existem fechamentos em JavaScript;
Porque muitos designs em JavaScript são derivados de Scheme;
Vamos dar uma olhada na explicação do MDN sobre fechamentos de JavaScript:
Uma função é empacotada com uma referência ao seu estado circundante (ambiente lexical) (ou a função é cercada por referências). Em outras palavras, um fechamento permite acessá-la dentro de uma função interna. de sua função externa;
Em JavaScript, sempre que uma função é criada, o encerramento será criado ao mesmo tempo que a função é criada
function foo() {; var nome = 'por que' var idade = 18 barra de função() { console.log('barra',nome) } return bar}var fun = foo()fun()
Resumo:
Uma função de função comum é um encerramento se puder acessar as variáveis livres nas quais a camada externa atua;
De uma perspectiva ampla: funções em JavaScript são encerramentos;
De um ponto de vista restrito: se uma função em JavaScript acessa uma variável externa, é um encerramento
para o escopo global:
Navegador: janela
Ambiente do nó: {}
Arrow function é um método de escrever funções adicionado após ES6 e é mais conciso do que expressões de função;
As funções de seta não vincularão estes atributos e argumentos;
As
funções de seta não podem ser usadas como construtores (não podem ser usadas com new, um erro será gerado).
argumentos é uma matriz (pseudo) (semelhante a uma matriz) correspondente aos parâmetros passados para a função
Existe um conceito muito importante na programação funcional chamado funções puras. JavaScript está em conformidade com as especificações da programação funcional, portanto, existe também o conceito de funções puras
da Wikipedia:
Na programação, se uma função atende às seguintes condições, então essa função é chamada de função pura. Quando a função tem o mesmo valor de entrada, ela precisa produzir a mesma saída. A saída da função não tem nada a ver com outras informações ocultas. ou estados diferentes do valor de entrada Funções não relacionadas à saída externa gerada por dispositivos de E/S não podem ter efeitos colaterais de função semanticamente observáveis, como "eventos desencadeadores", causando a saída de dispositivos de saída ou alterando o conteúdo de objetos que não sejam valores de saída. . Resumo:
Uma entrada determinada deve produzir uma determinada saída;
Durante a execução de uma função, nenhum efeito colateral pode ocorrer
:
Currying também é um conceito muito importante na programação funcional, a Wikipedia explica:
Na ciência da computação, Currying (Currying), também traduzido como Currying ou Currying, é uma função que aceita múltiplos parâmetros, torna-se uma função que recebe um único parâmetro (o primeiro parâmetro da função original) e retorna Uma nova função que aceita o argumentos restantes e retorna um resultado Afirmação curried: Se você corrigir certos argumentos, obterá um
resumo da função que aceita os argumentos restantes:
Passe apenas parte dos parâmetros para a função chamá-la e deixe-a retornar uma área de função para processar os parâmetros restantes;
Este processo é chamado de curry.
Por que o curry é necessário:
Na programação funcional, muitas vezes esperamos que o problema tratado por uma função seja o mais simples possível, em vez de entregar muito processamento a uma função para lidar com
function foo(x,y,c) { retornar x + y + c } console.log(foo(10,20,30)) //Função Curry soma(x) { função de retorno(y) { função de retorno (z) { retornar x + y + z } } } var a = soma(10)(20)(30) console.log(a) //Simplifique o curry var sum2 = x => y => z => { retornar x + y + z } console.log(sum2(10)(20)(30))Função
função função combinada (Compose) é uma técnica e um modo para usar funções no desenvolvimento de JavaScript:
Por exemplo, agora precisamos chamar uma função em determinados dados e executar duas funções fn1 e fn2. Essas duas funções são executadas em sequência. Se precisarmos chamar duas funções todas as vezes, a operação parecerá repetitiva. combinar essas duas funções e chamá-las uma após a outra automaticamente?
Este processo é a combinação de funções, que chamamos de Função Compor
com instrução
.
+Função: Você pode formar seu próprio escopo. Não é recomendado usar a instrução with porque pode ser a fonte de erros de confusão e problemas de compatibilidade
. '} // var mensagem = "olá mundo" função foo() { barra de funções () { com(obj2) { console.log(mensagem) } } bar() } foo()
eval é uma função especial que pode executar a string recebida como código JavaScript
var strFn = 'var message = "Hello world"; eval(strFn)
Não é recomendado usar eval no desenvolvimento:
A legibilidade do código de avaliação é muito baixa (a legibilidade do código é um princípio importante do código de alta qualidade);
eval é uma string, portanto pode ser adulterada durante a execução, o que pode causar o risco de ser atacado;
A execução de eval deve passar pelo interpretador JS e deve ser otimizada pelo mecanismo JS
é um modo JavaScript restritivo, que faz com que o código se afaste implicitamente do "modo desleixado"; Quando os navegadores que suportam o modo estrito detectam o modo estrito no código, eles monitoram e executam o código de maneira mais estrita, eliminando alguns erros silenciosos originais, lançando erros, permitindo que o mecanismo Js possa realizar mais otimizações. ao executar código periodicamente (não há necessidade de lidar com alguma sintaxe especial)
"use strict"; // Ativa o modo estrito var message = "hello world" console.log(message)
restrições de modo estrito <br/ > Aqui falamos sobre algumas restrições estritas de sintaxe no modo estrito:
O JavaScript foi projetado para ser mais fácil de começar para desenvolvedores novatos, portanto, às vezes, a sintaxe incorreta é considerada analisada normalmente. No entanto, no modo estrito, esses erros serão tratados como erros para que
// 1. Crie acidentalmente uma variável global message = "Hello world" console.log(mensagem) função foo() { idade=20 } foo()O modo estrito
Console.log(age)
//Erro estático padrão true.name ='xiaoluo'; NaN = 123
// Parâmetros de função não podem ter o mesmo nome function foo(x,y,x) { console.log(x,y,x)}foo(10,20,30)
var num = 0o123 // Octal var num2 = 0x123 // Hexadecimal console.log(num,num2)
var obj2 = {name:'Tom',age:18,message:'obj2'}não é permitido
com(obj2) { console.log(mensagem) }
var para a camada superior strFn = 'var message = "Hello world" console.log(message);'; avaliação(strFn)No modo estrito
console.log(message)
function foo() {. console.log(this) //indefinido } foo()