javascript - problème de portée js ?
phpcn_u1582
phpcn_u1582 2017-06-26 10:50:34
0
4
641
var b = 10;
(function b(){
    b = 20;
    console.log(b);
})();

Pourquoi le résultat affiche-t-il la fonction ? Je souhaite également demander si la bfonction entre parenthèses a une fonction de promotion

phpcn_u1582
phpcn_u1582

répondre à tous(4)
扔个三星炸死你

Le nom de la fonction dans l'expression de la fonction est immuable et ne peut être qu'entre guillemets et ne peut pas être attribué. Si vous ajoutez 'use strict' vous pouvez observer l'erreur en mode strict.

阿神

@Le code rapide 10 de la touche lumineuse doit être suivi d'un point-virgule

Il n'y a pas de promotion de fonction ici. La promotion de fonction n'existe que dans le cas d'une "déclaration de fonction", pas dans le cas d'une "expression de fonction".
Concernant la différence entre « déclaration de fonction » et « expression de fonction », de nombreux articles sur Internet l'expliquent très clairement. Vous pouvez rechercher et apprendre par vous-même.

学霸

Ce que dit le deuxième étage, c'est qu'il n'est pas possible de modifier le nom d'une fonction dans une fonction, par exemple :

(function a(){
    a = 10; //这个表达式不会成功,函数a依旧是函数a,至于这里面的a = 10等同于被废弃了,也不会生成相应的全局变量
})();

Quant à savoir pourquoi la fonction a est générée au lieu de 20, le simple fait est que l'instruction est directement ignorée, ce qui équivaut à

var b = 10;
(function b(){
    console.log(b);
})();

Supplément : 
On vient de me rappeler que les fonctions auto-exécutables sont également des expressions de fonction. Je m'excuse de m'avoir induit en erreur lorsque j'ai commencé à écrire la réponse.

var b = 10; 
var b = (function(){ 
    b = 10; 
    console.log(b); //输出:10
})(); 
console.log(b); //输出:undefined 。 b在自执行函数那里没有获取到返回值
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal