Maison >interface Web >js tutoriel >Une introduction à la différence entre var foo = function () {} et function foo() lors de la définition d'une fonction en JavaScript (tutoriel détaillé)

Une introduction à la différence entre var foo = function () {} et function foo() lors de la définition d'une fonction en JavaScript (tutoriel détaillé)

亚连
亚连original
2018-06-02 11:59:511652parcourir

Cet article présente principalement la différence entre var foo = function () {} et function foo() lors de la définition d'une fonction en JavaScript. Les amis qui en ont besoin peuvent s'y référer

Un jour où j'écrivais. code, j'ai soudainement eu cette question, résumons une vague de

Le comportement de « levage » des déclarations de fonctions et de variables JavaScript

En termes simples, si nous utilisons des fonctions anonymes

var a = {}

De cette façon, la déclaration de variable a sera "avancée" après la compilation, mais son affectation (c'est-à-dire a) ne sera pas avancée.

C'est-à-dire que la fonction anonyme n'est initialisée que lorsqu'elle est appelée.

Si vous utilisez

function a () {};

, la déclaration de la fonction et son affectation seront avancées après compilation.

C'est-à-dire que le prétraitement du processus de déclaration de fonction est terminé avant que l'ensemble du programme ne soit exécuté, donc tant qu'il est dans la même portée, il est accessible, même s'il est appelé avant la définition .

En regardant un exemple

function hereOrThere() { //function statement
  return 'here';
}
console.log(hereOrThere()); // alerts 'there'
function hereOrThere() {
  return 'there';
}

nous constaterons que l'instruction alert(hereOrThere) sera alert('there') exécutée ! Le comportement ici est en fait très inattendu.La raison principale est le comportement "précoce" des déclarations de fonctions JavaScript. En bref, JavaScript nous permet d'utiliser des variables et des fonctions avant qu'elles ne soient déclarées, et la deuxième définition remplace la première. En d'autres termes, une fois le code ci-dessus compilé, il équivaut à

function hereOrThere() { //function statement
 return 'here';
}
function hereOrThere() {//申明前置了,但因为这里的申明和赋值在一起,所以一起前置
 return 'there';
}
console.log(hereOrThere()); // alerts 'there'

Le comportement que nous attendons

var hereOrThere = function () { // function expression
  return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function () {
  return 'there';
};

Une fois ce programme compilé, il équivaut à :

var hereOrThere;//申明前置了
hereOrThere = function() { // function expression
 return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function() {
 return 'there';
};

Ci-dessus, je l'ai compilé pour tout le monde. J'espère qu'il sera utile à tout le monde à l'avenir.

Articles connexes :

Méthode Vue2.0 pour implémenter les conseils d'invite de navigation dans les pages

vue2.0 change de style en fonction de la valeur d'état Afficher méthode

Comment implémenter une application de prise de notes à l'aide de Vuex

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn