Contexto Léxico - Javascript
10/11/2019
0
Eu tenho uma dúvida em relação ao seguinte código:
Queria entender porque as duas funções estão utilizando o valor de PREÇO e DESC definidos dentro da arrow function TESTE, sendo que as arrows functions trabalham com variáveis de escopo global, e as expressions functions tem o seu this definidos no escopo global. E se eu comentar as variáveis locais de TESTE, as duas funções passam a utilizar as variáveis de escopo global.
global.preco = 10 global.desc = 0.18 const teste = (imposto = 0, moeda = 'R$') => { preco = 20 desc = 0.453523 console.log('valor de preco',preco) console.log('valor de desconto',desc) return `$ ${preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const teste2 = function (imposto = 0, moeda = 'R$'){ console.log('valor de preco',this.preco) console.log('valor de desconto',this.desc) return `$ ${this.preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const produto = { nome: 'notebook', preco: 4589, desc: 0.15, teste } console.log('valor da função teste: ',teste()) console.log('valor da função teste2: ',teste2())
Queria entender porque as duas funções estão utilizando o valor de PREÇO e DESC definidos dentro da arrow function TESTE, sendo que as arrows functions trabalham com variáveis de escopo global, e as expressions functions tem o seu this definidos no escopo global. E se eu comentar as variáveis locais de TESTE, as duas funções passam a utilizar as variáveis de escopo global.
Wendel Rios
Curtir tópico
+ 0
Responder
Post mais votado
14/11/2019
Dae Wendel !! Tudo bem?
Cara, pelo que entendi vc tem um problema no seu código com escopos de variáveis, certo? Pelo que parece vc está querendo que dentro da função teste() as variáveis preco e desc sejam locais, ou seja, os valores que vc definir para essas variáveis dentro de teste() não afetem os valores definidos para elas no escopo global. Isso?
Se for isso mesmo... Em javascript para vc definir variáveis com escopo local terá que usar a palavra reservada "var" antes do nome delas... ficaria assim seu código:
Outro detalhe, eu inseri a palavra function na linha onde vc define a função teste...
Não testei aqui, mas acho que isso poderá lhe ajudar...
Espero ter ajudado,
abraço e bons códigos.
Cara, pelo que entendi vc tem um problema no seu código com escopos de variáveis, certo? Pelo que parece vc está querendo que dentro da função teste() as variáveis preco e desc sejam locais, ou seja, os valores que vc definir para essas variáveis dentro de teste() não afetem os valores definidos para elas no escopo global. Isso?
Se for isso mesmo... Em javascript para vc definir variáveis com escopo local terá que usar a palavra reservada "var" antes do nome delas... ficaria assim seu código:
global.preco = 10 global.desc = 0.18 const teste = function (imposto = 0, moeda = 'R$') => { var preco = 20 var desc = 0.453523 console.log('valor de preco',preco) console.log('valor de desconto',desc) return `$ ${preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const teste2 = function (imposto = 0, moeda = 'R$'){ console.log('valor de preco',this.preco) console.log('valor de desconto',this.desc) return `$ ${this.preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const produto = { nome: 'notebook', preco: 4589, desc: 0.15, teste } console.log('valor da função teste: ',teste()) console.log('valor da função teste2: ',teste2())
Outro detalhe, eu inseri a palavra function na linha onde vc define a função teste...
const teste = function (imposto = 0, moeda = 'R$') => {
Não testei aqui, mas acho que isso poderá lhe ajudar...
Espero ter ajudado,
abraço e bons códigos.
Jorge Pinto
Responder
Mais Posts
10/11/2019
Wendel Rios
Eu tenho uma dúvida em relação ao seguinte código:
Queria entender porque as duas funções estão utilizando o valor de PREÇO e DESC definidos dentro da arrow function TESTE, sendo que as arrows functions trabalham com variáveis de escopo global, e as expressions functions tem o seu this definidos no escopo global. E se eu comentar as variáveis locais de TESTE, as duas funções passam a utilizar as variáveis de escopo global.
global.preco = 10 global.desc = 0.18 const teste = (imposto = 0, moeda = 'R$') => { preco = 20 desc = 0.453523 console.log('valor de preco',preco) console.log('valor de desconto',desc) return `$ ${preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const teste2 = function (imposto = 0, moeda = 'R$'){ console.log('valor de preco',this.preco) console.log('valor de desconto',this.desc) return `$ ${this.preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const produto = { nome: 'notebook', preco: 4589, desc: 0.15, teste } console.log('valor da função teste: ',teste()) console.log('valor da função teste2: ',teste2())
Queria entender porque as duas funções estão utilizando o valor de PREÇO e DESC definidos dentro da arrow function TESTE, sendo que as arrows functions trabalham com variáveis de escopo global, e as expressions functions tem o seu this definidos no escopo global. E se eu comentar as variáveis locais de TESTE, as duas funções passam a utilizar as variáveis de escopo global.
*** No caso ali na pergunta eu quis dizer que as arrows functions trabalham com escopos locais
Responder
15/11/2019
Wendel Rios
Dae Wendel !! Tudo bem?
Cara, pelo que entendi vc tem um problema no seu código com escopos de variáveis, certo? Pelo que parece vc está querendo que dentro da função teste() as variáveis preco e desc sejam locais, ou seja, os valores que vc definir para essas variáveis dentro de teste() não afetem os valores definidos para elas no escopo global. Isso?
Se for isso mesmo... Em javascript para vc definir variáveis com escopo local terá que usar a palavra reservada "var" antes do nome delas... ficaria assim seu código:
Outro detalhe, eu inseri a palavra function na linha onde vc define a função teste...
Não testei aqui, mas acho que isso poderá lhe ajudar...
Espero ter ajudado,
abraço e bons códigos.
. Exato, Jorge, era exatamente isso. Eu tinha esquecido de declarar as variaveis com a palavra reservada antes, no meu caso quando não estou utilizando constantes eu opto por utilizar a palavra reservada let mesmo. Valeu.Cara, pelo que entendi vc tem um problema no seu código com escopos de variáveis, certo? Pelo que parece vc está querendo que dentro da função teste() as variáveis preco e desc sejam locais, ou seja, os valores que vc definir para essas variáveis dentro de teste() não afetem os valores definidos para elas no escopo global. Isso?
Se for isso mesmo... Em javascript para vc definir variáveis com escopo local terá que usar a palavra reservada "var" antes do nome delas... ficaria assim seu código:
global.preco = 10 global.desc = 0.18 const teste = function (imposto = 0, moeda = 'R$') => { var preco = 20 var desc = 0.453523 console.log('valor de preco',preco) console.log('valor de desconto',desc) return `$ ${preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const teste2 = function (imposto = 0, moeda = 'R$'){ console.log('valor de preco',this.preco) console.log('valor de desconto',this.desc) return `$ ${this.preco * (1 - desc) * (1 + imposto).toFixed(2)}` } const produto = { nome: 'notebook', preco: 4589, desc: 0.15, teste } console.log('valor da função teste: ',teste()) console.log('valor da função teste2: ',teste2())
Outro detalhe, eu inseri a palavra function na linha onde vc define a função teste...
const teste = function (imposto = 0, moeda = 'R$') => {
Não testei aqui, mas acho que isso poderá lhe ajudar...
Espero ter ajudado,
abraço e bons códigos.
Responder
Clique aqui para fazer login e interagir na Comunidade :)