Function
BaselineWidely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Resumo
Oconstrutor Function
cria um novo objetoFunction
. Chamar o construtor diretamente pode criar funções dinamicamente, mas sofre com problemas de segurança e desempenho semelhante (mas muito menos significativo) aeval
. No entanto, diferentemente de eval, a Função construtora cria funções que executam somente no escopo global.
Sintaxe
new Function ([arg1[, arg2[, ...argN]],] functionBody)
Parâmetros
arg1, arg2, ... argN
Nomes para serem usados pela função como nomes formais de argumentos. Cada um deve ser uma string que corresponde para uma válida identidade JavaScript ou uma lista de certas strings separadas com uma vírgula; por exemplo "x", "theValue". our "a,b".
functionBody
Uma string que contém as instruções JavaScript que compõem a definição da função.
Descrição
ObjetosFunction
criados com o construtorFunction
sãoparseados quando a função é criada. Isto é menos eficiente que criar com umaexpressão de função ou umdeclaração de função e chamando-a dentro do seu código, porque tais funções sãoparseadas com o resto do código.
Todos os argumentos passados para a função são tratados como os nomes dos indetificadores dos parâmetros na função a ser criada, na mesma ordem na qual eles foram passados.
Nota:Funções criadas com o construtorFunction não criam closures
para o seu contexto de criação; elas sempre são criadas no escopo global. Quando executadas, elas terão acesso apenas às suas variáveis locais ou globais, não terão acesso às variáveis do escopo na qual o construtorFunction
foi chamado. Isto é diferente de usareval
com o código de uma expressão de função.
Invocar o construtorFunction
como uma função (sem usar o operadornew
) tem o mesmo efeito de chamá-la como um construtor.
Propriedades e Métodos daFunction
O objeto globalFunction
não tem métodos ou propriedades próprias, no entanto, como ela é uma função, ela herda alguns métodos e propriedades através do prototype chain doFunction.prototype
.
Function
prototype object
Propriedades
Métodos
Function
instances
Function
instances inherit methods and properties fromFunction.prototype
. As with all constructors, you can change the constructor's prototype object to make changes to allFunction
instances.
Exemplos
Exemplos: Especificando argumentos com o construtorFunction
O código a seguir cria um objetoFunction
que recebe dois argumentos.
// O exemplo pode ser executado direto no seu console JavaScript// Cria uma função que recebe 2 argumentos e retorna a soma entre os dois:var adder = new Function("a", "b", "return a + b");// Chamada da funçãoadder(2, 6);// > 8
Os argumentos "a
" e "b
" são os argumentos que serão usados no corpo da função, "return a + b
".
Exemplo: Um atalho recursivo para modificar o DOM em massa
Creating functions with theFunction
constructor is one of the ways to dynamically create an indeterminate number of new objects with some executable code into the global scope from a function. The following example (a recursive shortcut to massively modify the DOM) is impossible without the invocation of theFunction
constructor for each new query if you want to avoid closures.
<!doctype html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title> MDN Example - a recursive shortcut to massively modify the DOM </title> <script type="text/javascript"> var domQuery = (function () { var aDOMFunc = [ Element.prototype.removeAttribute, Element.prototype.setAttribute, CSSStyleDeclaration.prototype.removeProperty, CSSStyleDeclaration.prototype.setProperty, ]; function setSomething(bStyle, sProp, sVal) { var bSet = Boolean(sVal), fAction = aDOMFunc[bSet | (bStyle << 1)], aArgs = Array.prototype.slice.call(arguments, 1, bSet ? 3 : 2), aNodeList = bStyle ? this.cssNodes : this.nodes; if (bSet && bStyle) { aArgs.push(""); } for ( var nItem = 0, nLen = this.nodes.length; nItem < nLen; fAction.apply(aNodeList[nItem++], aArgs) ); this.follow = setSomething.caller; return this; } function setStyles(sProp, sVal) { return setSomething.call(this, true, sProp, sVal); } function setAttribs(sProp, sVal) { return setSomething.call(this, false, sProp, sVal); } function getSelectors() { return this.selectors; } function getNodes() { return this.nodes; } return function (sSelectors) { var oQuery = new Function( "return arguments.callee.follow.apply(arguments.callee, arguments);", ); oQuery.selectors = sSelectors; oQuery.nodes = document.querySelectorAll(sSelectors); oQuery.cssNodes = Array.prototype.map.call( oQuery.nodes, function (oInlineCSS) { return oInlineCSS.style; }, ); oQuery.attributes = setAttribs; oQuery.inlineStyle = setStyles; oQuery.follow = getNodes; oQuery.toString = getSelectors; oQuery.valueOf = getNodes; return oQuery; }; })(); </script> </head> <body> <div>Lorem ipsum</div> <p>Some text</p> <div>dolor sit amet</div> <script type="text/javascript"> domQuery(".testClass") .attributes("lang", "en")("title", "Risus abundat in ore stultorum") .inlineStyle("background-color", "black")("color", "white")( "width", "100px", )("height", "50px"); </script> </body></html>
Especificação
Specification |
---|
ECMAScript® 2026 Language Specification # sec-function-objects |