O código dentro de uma função
JavaScript será executado quando "algo" o invocar.
O código dentro de uma função não é executado quando a função é definida.
O código dentro de uma função é executado quando a função é invocada.
É comum usar o termo "chamar uma função" em vez de "invocar uma função".
Também é comum dizer "chamar uma função", "iniciar uma função" ou "executar uma função".
Neste tutorial, usaremos invoke, porque um A função JavaScript pode ser invocada sem ser chamada.
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); //
Will return 20
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>The global function (myFunction) returns the product of the arguments (a ,b):</p>
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = myFunction(10, 2);
</script>
</body>
</html>
A função acima não pertence a nenhum objeto. Mas em JavaScript existe é sempre um objeto global padrão.
Em HTML, o objeto global padrão é a própria página HTML, portanto a função acima "pertence" ao Página HTML.
Em um navegador, o objeto da página é a janela do navegador. A função acima torna-se automaticamente uma função de janela.
Essa é uma maneira comum de invocar uma função JavaScript, mas não é uma prática muito boa.
Variáveis, métodos ou funções globais podem facilmente criar conflitos de nomes e bugs no objeto global.
myFunction() e window.myFunction() são a mesma função:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // Will also return 20
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>Global functions automatically become window methods. Invoking myFunction() is the same as invoking window.myFunction().</p>
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = window.myFunction(10, 2);
</script>
</body>
</html>
Em JavaScript, a palavra-chave this
refere-se a um objeto.
Qual objeto depende de como este
está sendo invocado (usado ou chamado).
A palavra-chave this
refere-se a diferentes objetos dependendo de como é usada:
Em um método de objeto, this
refere-se ao objeto.
Sozinho, isto
refere-se ao objeto global.
Em uma função, this
refere-se ao objeto global.
Em uma função, no modo estrito, isso
é indefinido
.
Em um evento, this
refere-se ao elemento que recebeu o evento.
Métodos como call()
, apply()
e bind()
pode referir isso
a qualquer objeto.
isto
não é uma variável. É uma palavra-chave. Você não pode alterar o valor de isto
.
O tutorial de JavaScript este
Quando uma função é chamada sem um objeto proprietário, o valor de this
torna-se o objeto global.
Em um navegador web, o objeto global é a janela do navegador.
Este exemplo retorna o objeto window como o valor de this
:
let x = myFunction();
// x will be the window object
function myFunction() {
return this;
}
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>In HTML the value of <b>this</b>, in a global function, is the window object.</p>
<p id="demo"></p>
<script>
let x = myFunction();
function myFunction() {
return this;
}
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Invocar uma função como uma função global faz com que o valor de this seja o objeto global.
Usar o objeto window como uma variável pode facilmente travar seu programa.
Em JavaScript você pode definir funções como métodos de objetos.
O exemplo a seguir cria um objeto (myObject), com dois propriedades (firstName e lastName) e um método (nome completo):
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>myObject.fullName() will return John Doe:</p>
<p id="demo"></p>
<script>
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>
</html>
O método fullName é uma função. A função pertence a o objeto. myObject é o proprietário da função.
A coisa chamada this
é o objeto que "possui" o código JavaScript. Neste caso, o valor de this
é meuObject.
Teste-o! Altere o método fullName para retornar o valor de este
:
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// This will return [object Object] (the owner object)
myObject.fullName();
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>The value of <b>this</b>, in an object method, is the owner object.</p>
<p id="demo"></p>
<script>
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function() {
return this;
}
}
document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>
</html>
Invocar uma função como um método de objeto faz com que o valor de this
ser o próprio objeto.
Se uma invocação de função for precedida pela palavra-chave new
, é uma invocação de construtor.
Parece que você criou uma nova função, mas como as funções JavaScript são objetos você realmente cria um novo objeto:
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
const myObj = new myFunction("John", "Doe");
// This will return "John"
myObj.firstName;
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>In this example, myFunction is a function constructor:</p>
<p id="demo"></p>
<script>
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
const myObj = new myFunction("John","Doe")
document.getElementById("demo").innerHTML = myObj.firstName;
</script>
</body>
</html>
Uma invocação de construtor cria um novo objeto. O novo objeto herda o propriedades e métodos de seu construtor.
A palavra-chave this
no construtor não possui um valor.
O valor de this
será o novo objeto criado quando a função for invocada.