javascript 函数声明与函数表达式的区别介绍_javascript技巧
还是一样,先上代码:
<script> <BR>var f = function g() { <BR>return 1; <BR>}; <BR>if (false) { <BR>f = function g(){ <BR>return 2; <BR>}; <BR>} <BR>alert(g()); // 2 <BR></script>
把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。
这里输出2 是在ie6里面的效果,如果在chorme会出现g没有定义。
这也算是JScript的bug吧。
在这里很明显,这里的只是定义了g的函数表达式而已。包括在if的条件语句中,也只是定义了函数表达式,没有去声明函数。
那么这样直接访问肯定是会出错的。
那么对于何为声明,何为函数表达式呢?
在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:
函数声明:
function 函数名称 (参数:可选){ 函数体 }
函数表达式:
function 函数名称(可选)(参数:可选){ 函数体 }
所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。
还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式。
你可能会想到,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les paramètres par défaut en C++ offrent la possibilité de spécifier des valeurs par défaut pour les paramètres de fonction, améliorant ainsi la lisibilité, la simplicité et la flexibilité du code. Déclarez les paramètres par défaut : ajoutez le symbole "=" après le paramètre dans la déclaration de la fonction, suivi de la valeur par défaut. Utilisation : Lorsque la fonction est appelée, si des paramètres facultatifs ne sont pas fournis, les valeurs par défaut seront utilisées. Cas pratique : Une fonction qui calcule la somme de deux nombres. Un paramètre est obligatoire et l'autre est facultatif et a une valeur par défaut de 0. Avantages : lisibilité améliorée, flexibilité accrue, code passe-partout réduit. Remarque : Il ne peut être spécifié que dans la déclaration, il doit être à la fin et les types doivent être compatibles.

En C++, l'ordre des déclarations et des définitions de fonctions affecte le processus de compilation et de liaison. Le plus courant est que la déclaration vient en premier et la définition après ; vous pouvez également utiliser « forwarddeclaration » pour placer la définition avant la déclaration ; si les deux existent en même temps, le compilateur ignorera la déclaration et n'utilisera que la définition.

Une déclaration de fonction informe le compilateur de l'existence de la fonction et ne contient pas l'implémentation, qui est utilisée pour la vérification de type. La définition de fonction fournit l'implémentation réelle, y compris le corps de la fonction. Les principales caractéristiques distinctives comprennent : l’objectif, l’emplacement et le rôle. Comprendre les différences est crucial pour écrire du code C++ efficace et maintenable.

La déclaration et la définition de fonction sont nécessaires en C++. La déclaration de fonction spécifie le type de retour, le nom et les paramètres de la fonction, tandis que la définition de fonction contient le corps et l'implémentation de la fonction. Déclarez d’abord la fonction, puis utilisez-la dans votre programme en passant les paramètres requis. Utilisez l'instruction return pour renvoyer une valeur d'une fonction.

Erreur de compilation C++ : l'appel de fonction ne correspond pas à la déclaration de fonction, comment la résoudre ? Lors du développement de programmes C++, vous rencontrerez inévitablement des erreurs de compilation. L'une des erreurs courantes est que l'appel de fonction ne correspond pas à la déclaration de fonction. Ce type d'erreur est largement répandu parmi les programmeurs C++. En raison du fait qu'ils ne prêtent pas attention à l'exactitude de la déclaration des fonctions, cela entraîne des problèmes de compilation, ce qui fait finalement perdre du temps et de l'énergie à résoudre le problème et affecte l'efficacité du développement. Les moyens d’éviter cette erreur nécessitent de suivre certaines normes et pratiques standards, examinons-les ci-dessous. Qu'est-ce qu'un appel de fonction par rapport à une déclaration de fonction ?
![[[nodiscard]] dans les déclarations de fonctions C++ : démystifier les conséquences de l'ignorance des valeurs de retour](https://img.php.cn/upload/article/000/465/014/171455868319393.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
L'attribut [[nodiscard]] indique que la valeur de retour de la fonction ne doit pas être ignorée, sinon cela provoquera un avertissement ou une erreur du compilateur pour éviter les conséquences suivantes : exceptions non initialisées, fuites de mémoire et résultats de calcul incorrects.

La syntaxe de déclaration de fonction C++ est la suivante : returnTypefunctionName(parameterType1parameterName1,...,parameterTypeNparameterNameN);, où returnType est le type de retour, functionName est le nom de la fonction, ParameterType est le type de paramètre et ParameterName est le nom du paramètre, qui doit se terminer par un point-virgule.

Une déclaration de fonction indique au compilateur qu'une fonction existe sans fournir de corps de fonction. Les étapes sont les suivantes : spécifier le type de retour de la fonction (void s'il n'y a pas de valeur de retour) définir le nom de la fonction et déclarer les paramètres de la fonction (facultatif, y compris le type de données et l'identifiant) plus un point-virgule
