Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域

时间:2021-12-07 01:11:10

昨天写了闭包

今天就来聊聊块级作用域的事情

在绝大多数编程语言中,都有块级作用域这个概念

什么是块级作用域呢?

前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块

块级作用域,指的就是这种代码块作用域

在其它类C的语言中,都拥有块级作用域

块级作用域

最常见的例子就是,在有块级作用域的语言中循环中声明的 i

只在当前的循环中可以访问,并不会污染全局变量

JS就不一样了,循环结束后 i 在循环的外部依然可以访问

for(var i = 0; i < 10; i++){
// ...
}
console.log(i);

这就是因为JS中没有块级作用域

虽然在ES6中JS也有块级作用域,但是只有用let const 声明的变量才有块级作用域

没有块级作用域,但我们又希望代码不要污染全局作用域,那么怎么办呢?

模仿块级作用域

作为一个合格的程序员,当没有现成的*的时候,怎么办?当然是自己造*了啊Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域

我们知道JS虽然没有块级作用域,但是有函数作用域啊

所以我们可以使用函数作用域来模仿块级作用域

首先我们要知道函数作用域和块级作用域的区别在哪里

和块级作用域相比,函数作用域无法就是多了一个函数名引用,占用的内存不会被自动回收嘛

那有一种函数不就很适合干这个事情嘛——匿名函数

现在还有一个问题,函数需要我们调用啊

也简单,我们使用函数表达式自执行不就完事儿了嘛

所以有代码如下:

(function(){
// ...
})();

PS. 只有函数表达式才能自执行,function声明的时候加()并不会立即执行,还会报错

将函数转为函数表达式的方法出来加小括号之外,JS中的一元操作符可以让函数转为函数表达式

! ~  + -

Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域

JS中的块级作用域就先讲到这啦~~ 明天再见

Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域的更多相关文章

  1. 《JavaScript高级程序设计》笔记:函数表达式(七)

    递归 function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } ...

  2. Javascript高级编程学习笔记(24)—— 函数表达式(2)闭包

    昨天的文章中主要记录了,函数表达式与函数声明的区别 以及在JS中如何安全地使用递归 那么既然要深入地理解JS中的函数,闭包就是一个绕不开的概念 闭包 JS高编一书中对闭包的概念定义如下: 闭包是指有权 ...

  3. Javascript高级编程学习笔记(6)—— 流程控制语句

    话不多说,我们直接开始进入今天的主题 流程控制语句 首先什么是流程控制语句呢? 顾名思义,就是控制流程的语句. 在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指 ...

  4. Javascript高级编程学习笔记(10)—— 作用域、作用域链

    昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声 ...

  5. Javascript高级编程学习笔记(23)—— 函数表达式(1)递归

    前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...

  6. Javascript高级编程学习笔记(26)—— 函数表达式(4)私有变量

    私有变量 严格来讲,JS中没有私有成员的概念,所有对象属性都是公有的. 但是JS中有私有变量的概念 所有在函数中定义的变量都可以认为是私有变量,因为不能在函数外部进行访问 私有变量包括 1.函数参数 ...

  7. Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型

    JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...

  8. Javascript高级编程学习笔记(7)—— 函数

    前几天有事耽搁了,今天继续更新 今天的主要内容是JS中的函数 这一篇主要讲函数的定义等内容,至于变量提升.执行环境.闭包.内存回收等内容在后面讲,高玩们可以不用看下面的正文了. 函数 首先来讲,函数对 ...

  9. JavaScript高级编程学习笔记&lpar;第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

随机推荐

  1. tableView优化性能

    在iOS应用中,UITableView应该是使用率最高的视图之一了.iPod.时钟.日历.备忘录.Mail.天气.照片.电话.短信. Safari.App Store.iTunes.Game Cent ...

  2. Qt之图标切分与合并

    有些时候会将多张有相同功能的图片绘制成一张,不管是使用或者绘制上都会方便很多.对美工与开发者来说也都是一件省事.省力.更省心的方式.二全其美,又何乐而不为呢... 例如:QQ等级     0-9可以组 ...

  3. Java知识总结--CoreJava

    在网上看到的关于Java的知识总结,觉得很受用,分享给大家..... 如果有什么错误,也欢迎指正批评. 1 简述下java基本数据类型及所占位数,java基本数据类型:4类8种 整数类型:byte(1 ...

  4. 在动态引用DLL-A中,当参数是个实体,而实体的属性在另一个DLL-B中。。我们需要得到A这个实体并将其赋值,并将赋值的实体传人DLL-A的方法中。

    string strPath = HttpContext.Current.Server.MapPath("/开放式DLL"); DirectoryInfo df = new Dir ...

  5. POJ1961Period

    POJ1961 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...

  6. java中的反编译

    使用JD-GUI工具  支持mac os 和 windows  地址为:http://jd.benow.ca

  7. WEB站点服务器安全配置

    WEB站点服务器安全配置   本文转自:i春秋社区   // 概述 // 熟悉网站程序 // 更改默认设置的必要性 // 目录分析与权限设置技巧 // 防止攻击其他要素 // 公司官网不可忽视的安全性 ...

  8. iOS 指导文章

    1. iOS 后台运行实现总结 http://www.jianshu.com/p/d3e279de2e32 2. C语言的各种版本:C89,AMD1,C99,C11:http://www.tuicoo ...

  9. python2的比较函数,cmp

    class Shu(object): def __init__(self,ss): self.ss = ss def __str__(self): return '(%s: %s)' % (self. ...

  10. Django&lowbar;分页

    目录 基本语法 示例 示例1 使用django内置Paginator模块 示例2 改写Paginator 示例3 自定义pager组件 示例3.1 objs与pager各自单独使用 示例3.2 obj ...