分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

You Don't Know JS: Scope & Closures (第3章: 函数 vs 块作用域)

发布时间:2023-09-06 02:16责任编辑:熊小新关键词:作用域

第二章,作用域由一系列的bubbles组成。每一个都代表了一个container或bucket,装着被声明的identifiers(variables, functions)。这些bubbles相互嵌套。这种嵌套是在开发阶段写完的。

什么制造了一个新的bubble? 只是函数吗?其他的JS结构可以创建bubbles of scope吗?

Function Vs. Block Scope


Scope From Functions

探索函数作用域和它的暗示implications.

函数作用域内的所有变量都属于这个函数,并能够反复在这个函数内使用(甚至在嵌套的作用域中)。

这种设计方法非常有用,可以充分利用动态的自然javascript变量, 在需要时携带不同类型的值。

另一方面,如果不小心,变量跨出一个作用域将导致一些意外的陷阱。

Hiding in Plain Scope

软件界的设计原则: 最少的特权。最少的暴露。比如为一个对象/模块的API, 你应当只暴露那些必要的代码。

这个原则扩展到:哪个作用域包括变量和函数的选择!

因此,变量/函数不应该都在全局作用域中。这违背了原则!

 避免碰撞

无限循环了

function foo() { ???function bar(a) { ???????i = 3; // changing the `i` in the enclosing scope‘s for-loop ???????console.log( a + i ); ???} ???for (var i=0; i<10; i++) { ???????bar( i * 2 ); // oops, infinite loop ahead! ???}}foo();

Global "Namespaces"

全局作用域可能发生变量碰撞。比如多个库被引用进你的程序。导致一些函数/变量的名字相同。

可以使用‘namespace’,声明一个对象。在这个对象内使用库的方法:

var MyReallyCoolLibrary = { ???awesome: "stuff", ???doSomething: function() { ???????// ... ???}, ???doAnotherThing: function() { ???????// ... ???}};

Module 管理

避免变量碰撞的另一个方法是更现代的module方法。使用相关的managers。


Functions As Scopes

Anonymous Vs. Named

Invoking Function Expressions Immediately


Blocks AS Scopes

 

try/catch

let

Garbage Collection垃圾收集

 

let Loops

 

Const


 

Reviews

You Don't Know JS: Scope & Closures (第3章: 函数 vs 块作用域)

原文地址:https://www.cnblogs.com/chentianwei/p/9738604.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved