参考原文链接-英文原文QQ群-Javascript高级爬虫-作者自建群,欢迎加入!awesome-java-crawler-作者收集的爬虫相关工具和资料一个帮你自动创建阿里云抢占式实例并开启网络加速的脚本-自动创建阿里云抢占式节点Whatisscope?范围是运行时代码的某个特定部分内的变量、函数或对象的可访问性。当最小特权原则应用于编程语言设计时,它们就诞生了。我们为什么要学习?它们通过仅在您真正需要它们时使用它们来为您的代码提供一定程度的安全性。确定部分代码的范围有助于提高效率、追踪和减少错误。它还解决了具有相同名称但作用域不同的变量时的命名问题,从而减少了命名空间冲突。范围的类型是什么?全局和局部词法块公共和私有让我们逐个例子看一下。全局作用域和局部作用域在函数外部声明的任何变量都属于全局作用域,因此可以在代码的任何位置访问和更改它。函数内定义的变量在局部范围内。它们对函数的每次调用都有不同的作用域。这意味着具有相同名称的变量可以在不同的函数中使用。这是因为这些变量绑定到它们各自的函数,每个函数都有不同的范围,并且在其他函数中不可访问。newfunction=newlocalscope-这是规则。全局和局部作用域词法作用域当一个函数在另一个函数内部时,内部函数可以访问外部函数中的作用域,这称为“词法作用域”,也称为“静态作用域”,因为它只能被_调用_(引用)在定义它的代码块中。词法作用域JavaScript从最内层的作用域开始向外搜索,直到找到它正在寻找的变量/对象/函数。要记住的重要一点是,对于词法作用域,没有反向。也就是说,在上面的例子中,我们无法访问SocialMedia函数和Platform函数中的comment变量。块作用域块语句(例如if和switch条件构造或for和while循环构造和{})与函数不同,它不会创建新的作用域。在块语句中定义的变量将保留在它们已经存在的范围内。块作用域让我们看一个关于它的面试问题(混合执行上下文、闭包和作用域知识)for(vari=0;i<3;i++){setTimeout(function(){console.log(i);},1000+我);}上面会输出3,3,3因为每次都分配相同的变量。在第一次迭代中,将console.log(i)添加到堆栈中,事件循环检测到它有延迟,将其发送到事件队列,这样又发生了两次,最后当事件循环在other读取和输出时,由于最后的i++,变量i的最终值为3,由于变量的作用域相同,每次提取的值为3。但是,ECMAScript6引入了let和const关键字。可以使用这些关键字代替var关键字,并且let和const关键字支持在块语句中声明局部作用域。现在让我们看看将vari更改为leti时的区别。for(leti=0;i<3;i++){setTimeout(function(){console.log(i);},1000+i);上面会输出0,1,2因为它是在每次新作用域时为变量创建的。公共和私有作用域包装公共(全局)作用域函数,使它们更健壮地抵御攻击。但是在JavaScript语言中,没有public或private作用域修饰符。但是,我们可以模拟它们。(function(){vartest=function(){//在这里做点什么};})();//函数末尾的括号告诉解释器如果没有调用它就读取它立即执行它。测试();//UncaughtReferenceError这种机制也可以使用称为模块模式的设计模式来创建。JavaScript中私有和公共作用域modulePattern的返回语句包含我们的公共函数。私有函数是那些不返回的函数。不返回函数使得它们在modulePattern命名空间之外不可访问。但是,我们的公共函数仍然可以访问同一范围内的私有函数,这使得它们可以方便地使用辅助函数。如果您想添加到我的电子邮件列表中,请考虑在此处输入您的电子邮件并在媒体上关注我以阅读有关javascript和github的更多文章以查看我的疯狂代码。我的比特币地址:132Ndcy1ZHs6DU4pV3q2X1GzSCdBEXX6pz我的以太坊地址:0xc46204dfc8449Ffb0f02a9e1aD81F30D3f027010您可能还喜欢我的其他文章JavascriptExecutionContext和LiftingJavascript—Builders/NextandAsyncAwait对Javascript'this'关键字(上下文)的理解。Javascript数据结构与映射、减少、过滤Javascript-CurryingVS部分应用程序JavascriptES6-迭代器和迭代器Javascript性能测试-每个vs(映射、减少、过滤、查找)。Javascript-ProxyJavascript—使用Tensorflow-jsNodejs应用程序结构进行范围图像对象检测—构建高度可扩展的架构。Node.js10.0.0,作为后端开发人员/安全爱好者可以期待什么?ImageProcessing-MakingCustomImageFiltersinReact.js谷歌印度面试题
