Switch case

12 respostas Resolvido
L

Boa tarde pessoal,

Estou tentando executar o código abaixo porém não estou conseguindo.

Objetivo: criar duas variáveis 1ª UF, 2ª ICMS. Preciso que a variável ICMS receba um valor de acordo com o “UF”.

Fiz dessa forma.

const uf = "sp"
const icms = valor()

valor = (uf) => {
	return
	
	switch(uf) {
	case "sp": 0,18
		break
	case "mg": 0,12
		break

12 Respostas

L

Execute esse código:

var valor = (uf) => {
	switch(uf) {
	case 'sp':
		return 0.18;
	case 'mg':
		return 0.12;
	}
}

const uf = 'sp';
const icms = valor(uf);
	
console.log(icms);
L

@Lucas_Camara porque na variável “icms” você coloca " valor(uf)"?

L

Isso significa que a função valor declarada no início do código está sendo invocada passando a uf como parâmetro. O resultado dessa chamada (avaliado pelo switch) será atribuído à variável icms.

L

Entendi! Muito obrigado. um dia eu chego nesse nível.

L

Mais uma pergunta,

Porque as variáveis vão depois da função e não antes?

L

Se a variável icms for declarada antes da função valor, vai dá erro falando que a função valor não existe.

L

Então sempre terei que fazer dessa forma?

L

No JS, há um conceito chamado hoisting, que permite vc declarar funções ou variáveis fora de ordem, que, ao executar, vai funcionar do mesmo jeito. Porém, isso não se aplica a function expressions (que é o que vc usou no seu código) ou se o código estiver num escopo com 'use strict';.

L

Entendi, pra mim a variável vinha entes da função.

L

Você pode declarar antes da função, mas assim:

<script>
	const uf = 'sp';
	var icms;
	
	var valor = (uf) => {
		switch(uf) {
		case 'sp':
			return 0.18;
		case 'mg':
			return 0.12;
		}
	}
	
	icms = valor(uf); //  depois da função criada que chamamos ela atribuindo à variável icms
	
	console.log(icms);
</script>
L

Eu fiz usando o Function e deu certo também.

L
Solucao aceita

E com hoisting (agora usando function declaration ao invés de function expression), vc pode declarar a função depois das variáveis sem problemas:

<script>
	const uf = 'sp';
	const icms = valor(uf); // funciona!
	
	console.log(icms);
	
	function valor(uf) { // o hoisting pega essa função e joga pro topo quando o script é executado
		switch(uf) {
		case 'sp':
			return 0.18;
		case 'mg':
			return 0.12;
		}
	}
</script>
Criado 21 de fevereiro de 2019
Ultima resposta 21 de fev. de 2019
Respostas 12
Participantes 2