Le contenu de cet article est une introduction détaillée (exemple de code) sur la portée en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aidé.
Presque tous les langages de programmation ont le concept de portée, alors à quoi fait référence exactement la portée ? La portée est un ensemble de règles sur la façon dont les variables sont stockées et accessibles lorsqu'un langage de programmation définit des variables. Les règles des différents langages de programmation sont similaires. Voyons ensuite comment cet ensemble de règles est défini
Principe de compilation
Dans les langages compilés traditionnels, il existe un processus de compilation avant l'exécution du code :Portée a généralement deux modèles de travail, le premier est utilisé par la plupart des langages de programmation L'autre type de La portée lexicale utilisée est appelée portée dynamique. Par exemple, le script Bash utilise la portée dynamique. La portée lexicale est la portée définie lors de l'étape lexicale. La portée lexicale est déterminée par l'endroit où vous écrivez les variables et les portées de bloc lorsque vous écrivez du code, tandis que la portée dynamique est déterminée par l'utilisation des variables. par l'emplacement. Regardons un exemple :
Tout d’abord, analysons combien de scopes y a-t-il au total ?function foo(a) { var b = a * 2; function bar(c) { console.log(a, b, c) } bar(b * 3) } foo(2)
La portée de la fonction signifie que toutes les variables appartenant à cette fonction peuvent être utilisées et réutilisées dans la portée de la fonction entière. C'est ce que tout le monde sait. Nous savons. la définition, mais à quoi sert l'existence d'une portée de fonction ? Examinons ensuite les secondes de portée de la fonction.
Masquer l'implémentation interne
Masquer l'implémentation interne consiste à envelopper des variables et des fonctions dans la portée d'une fonction pour atteindre l'objectif de masquage. Pourquoi faites-vous cela ? Il existe un principe très connu dans la conception de logiciels appelé principe d'exposition minimale, qui fait référence à l'exposition du contenu nécessaire au minimum et au masquage d'autres contenus, tels que la conception API de modules ou d'objets. Utilisez la portée de la fonction pour envelopper des variables et des fonctions afin d'atteindre le principe d'exposition minimale et d'empêcher tout accès externe direct. Jetez un œil à l'exemple suivant :
Dans ce code, doSomethingElse et b doivent être privés à l'intérieur de doSomething. . Mais il est exposé, ce qui entraînera une utilisation sous des formes inattendues et produira des résultats inattendus. Une conception plus raisonnable devrait consister à cacher ces contenus privés à l'intérieur de doSomething, comme :function doSomething(a) { b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); } function doSomethingElse(a) { return a - 1; } var b; doSomething( 2 ); // 15”
function doSomething(a) { function doSomethingElse(a) { return a - 1; } var b; b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); } doSomething( 2 );
(function doSomething(a) { function doSomethingElse(a) { return a - 1; } var b; b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); })(2)
块作用域
除JavaScript外很多编程语言都支持块作用域,尽管你可能写过很伪块作用域形式的代码,最常见的就是for循环:
for(var i=0; i<10; i++) { console.log(i) }
写这段代码通常是希望变量i在循环内部使用,但是实际上i会被绑定到外部作用域中,要确保没有在作用域的其他地方意外使用i,就只能依靠自觉,这时候块级作用域就显得尤为有用,ES6改变了现状,引入了新的let、const关键字,let关键字可以将变量绑定到所在的任意作用域中,也就是let为其声明的变量隐式地创建了作用域:
for(let i=0; i<10; i++) { console.log(i) } console.log(i) // ReferenceError
这时候i就只会在for循环的内部有效
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!