Diferentes formas de funciones de JavaScript, la función es una expresión, la función es un valor, la diferencia entre la declaración de función y la expresión de número de línea

diferentes formas de funciones

Una función puede ser una expresión.

En "Funciones de JavaScript" más arriba, presentamos que una JavaScriptfunción es una construcción sintáctica que encapsula un bloque de código para reutilizar código.

como sigue:

function add(a,b){
    
    
	return a + b;
}

El código anterior declara una función para la suma como una definición de funciónadd , y podemos reutilizar este código por el nombre de la función .

De hecho, tenemos otra forma de definir una función, que es tratar la función como una expresión , o una expresión de función , y asignar la expresión a una variable.

como sigue:

let add = function(a,b){
    
    
	return a+b;
};//这里有分号

//以下这种方式可能更容易理解
let add = function(a,b){
    
     return a+b; };

El código anterior es una declaración de asignación. El lado izquierdo es una variable letdefinida con una palabra clave add, y el lado derecho es una expresión de función. El significado de la declaración es asignar la expresión de función en el lado derecho a la variable en el lado izquierdo. add.

Atención: tenga en cuenta que no hay ningún nombre de función en la expresión de función de la derecha. Se permite omitir el nombre de la función en la expresión de función. Llamamos a esta definición de función sin nombre una función anónima .

El método de definición de función de este último tipo de expresión es funcionalmente el mismo que la función de declaración de función anterior, en resumen, es definir una función y almacenarla en una addvariable .

Cuando se usa una expresión de función, se debe agregar el punto y coma al final de la declaración.Este ;punto y coma es parte de la declaración de asignación, no el requisito de sintaxis de la definición de la función.

La esencia de una función es un valor.

El código anterior refleja dos formas diferentes de definir una función, pero no importa qué método se use, no puede cambiar la esencia de una función como valor.

Los dos métodos de definición anteriores usan una addvariable nombrada para almacenar una función, y también podemos imprimir el valor de la variable:

function add1(a,b){
    
    
	return a+b;
}
let add2 = function(a,b){
    
     return a+b; };

console.log(add1);
console.log(add2);

El resultado de la impresión es el siguiente:

Esto prueba que en JavaScript, una función es un valor especial, y si imprimimos este valor, obtenemos la cadena fuente de la función.

Cabe señalar que no importa qué método se use para definir la función, si el nombre de la función se usa directamente, por ejemplo add1, la add2función no se ejecutará y se debe agregar la función de llamada ().

Dado que una función es un valor, podemos realizar algunas operaciones variables sobre ella, como asignación, copia, etc.

Tome una ciruela pequeña:

function add(a,b){
    
    	//定义了一个函数变量add
	return a+b;
}
let otherAdd = add;	//变量复制

console.log(add(1,1));
console.log(otherAdd(1,2));

Resultado de la ejecución del código:

¿Qué sucede con el código anterior:

  1. Primero use la declaración de función, cree una función y coloque la función en una variable add;
  2. Copie el valor de la variable función add(es decir, la función) a otra variable , tenga en otherAddcuenta que aquí no hay addnada detrás , si lo ()trae , le asignará el resultado de ejecución de la función a la variable;()add()otherAdd
  3. Finalmente , la misma función se almacena internamente, y cuando se llama como función, tendrá el mismo efecto, es decir, para realizar la suma de números add.otherAdd

Por supuesto, el código está escrito de la siguiente manera para tener el mismo efecto:

let add =function(a,b){
    
     return a+b; };
let otherAdd = add;

console.log(add(1,1));
console.log(otherAdd(1,2));

Una cadena o número representa el valor de "datos", y una función puede entenderse como el valor de "comportamiento", lo
mismo es que se pueden pasar como el valor de una variable,
la diferencia es que los "datos" El valor se utiliza para el cálculo. A modo de comparación, el valor de "comportamiento" está disponible para la "ejecución".

Llamar de vuelta

Como se mencionó anteriormente, la esencia de una función es un valor especial. Ya que es un valor, ¡se puede pasar como un parámetro!

Las funciones que se pasan como parámetros a menudo se denominan funciones de devolución de llamada .

Toma una castaña:

function ask(ques, yes,no){
    
    
	if(confirm(ques)){
    
    
		yes();
	}else{
    
    
		no();
	}
}

function selectedYes(){
    
    
	console.log('安排');
}

function selectedNo(){
    
    
	console.log('下次一定');
}

// 将selectedYes和selectedNo作为参数传入ask函数
ask('点个关注,干不干?',selectedYes,selectedNo);

El código anterior es muy común en el proceso de desarrollo real, y las dos funciones que se askpasan en la función se denominan funciones de devolución de llamada (callbacks).selectedYesselectedNo

En pocas palabras, pasamos una función como parámetro y esperamos que esa función se ejecute ("devolución de llamada") en algún momento en el futuro.
Por ejemplo, en el ejemplo anterior selectedYeses Yesla devolución de llamada para selectedNola respuesta, la devolución de llamada para la respuesta No.

Además de la escritura en el ejemplo anterior, también podemos pasar la función de devolución de llamada directamente en forma de función anónima , acortando así en gran medida el código:

function ask(ques,yes,no){
    
    
	if(confirm(ques)){
    
    
		yes();
	}else{
    
    
		no();
	}
}

ask(
	'点个关注?',
	function(){
    
    console.log('好说');},
	function(){
    
    console.log('想得美');}
);//调用

La forma anterior de pasar funciones anónimas directamente en el proceso de llamada de función es una JavaScriptcaracterística muy obvia, y también es una característica muy importante. Veremos esta característica apareciendo todo el tiempo en varios proyectos~~~

La forma en que la función anónima se pasa a la devolución de llamada puede hacer que la devolución de llamada sea JavaScriptcasi completamente anónima, y ​​solo askse puede acceder a ella desde dentro de la función, que es exactamente el resultado que queremos~~

Diferencia entre expresión de función y declaración de función

  • diferencias gramaticales

Una declaración de función crea una función separada en el archivo de código:

function add(a,b){
    
    
	return a+b;
}

Las expresiones de función crean funciones dentro de una expresión o dentro de otra construcción sintáctica:

let add = function(a,b){
    
    
	return a+b;
}
  • ¿Cuándo crea el motor la función?

Las expresiones de función se crean después de que el código se ejecuta en la expresión y solo se pueden usar desde la creación.

Cuando se ejecuta el código a let func = function(){...}la derecha, se crea la función, que está disponible cuando la función se asigna a una variable func.

Las declaraciones de funciones se definen antes de que se ejecute todo el código, y puede usar

Esto se debe a que, JavaScriptcuando el motor ejecuta el script, primero encuentra todas las funciones globales de todo el archivo y luego crea estas funciones.

Como resultado de esta característica, podemos usar funciones antes de las declaraciones de funciones:

add(1,2);	//函数还没有创建的时候就可以使用了

function add(a,b){
    
     //在程序执行之初就被创建
	return a+b;
}

El resultado de la ejecución del código es el siguiente:

Si la función se declara como una expresión, se informará un error:

add(1,2);//报错
let add = function(a,b){
    
     return a+b; }
  • alcance

En modo estricto, las declaraciones de funciones solo son {...}visibles dentro del bloque de código ( ) en el que se declaran y no se pueden usar fuera del código, al igual que las variables locales.

por ejemplo:

let score = prompt('请输入你的期末成绩',0);

//在if语句中声明一个函数
if(score > 80){
    
    
	function doSomething(){
    
    
		console.log('好学生')//输出好好学生
	}
}else{
    
    
	function doSomething(){
    
    
		console.log('找个厂吧')//建议打工
	}
}

doSomething();//报错,函数不存在

En teoría, score > 80el definirá una función para generar "buen estudiante" y, en otros casos, generará "encontrar una fábrica" ​​y luego ifllamarlo más tarde.

Sin embargo, debido a la naturaleza de la declaración de la función, solo se puede ifver dentro del bloque de código de la declaración y no se puede usar fuera, por lo que el código informará un error.

¿Cómo lidiar con ello? Aquí puede usar expresiones de función, que también es la diferencia entre los dos:

let score = prompt('请输入你的期末成绩',0);

let doSomething;
if(score>80){
    
    
	doSomething = function(){
    
    
		console.log('好学生');
	}
}else{
    
    
	doSomething = function(){
    
    
		console.log('找个厂吧');
	}
}

doSomething();

deberes despues de clase

Usando el operador ternario, reescriba el siguiente código:

let score = prompt('请输入你的期末成绩',0);

let doSomething;
if(score>80){
    
    
	doSomething = function(){
    
    
		console.log('好学生');
	}
}else{
    
    
	doSomething = function(){
    
    
		console.log('找个厂吧');
	}
}

doSomething();

Supongo que te gusta

Origin blog.csdn.net/weixin_43302112/article/details/124460279
Recomendado
Clasificación