Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
昨天写了闭包
今天就来聊聊块级作用域的事情
在绝大多数编程语言中,都有块级作用域这个概念
什么是块级作用域呢?
前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块
块级作用域,指的就是这种代码块作用域
在其它类C的语言中,都拥有块级作用域
块级作用域
最常见的例子就是,在有块级作用域的语言中循环中声明的 i
只在当前的循环中可以访问,并不会污染全局变量
JS就不一样了,循环结束后 i 在循环的外部依然可以访问
for(var i = 0; i < 10; i++){
// ...
}
console.log(i);
这就是因为JS中没有块级作用域
虽然在ES6中JS也有块级作用域,但是只有用let const 声明的变量才有块级作用域
没有块级作用域,但我们又希望代码不要污染全局作用域,那么怎么办呢?
模仿块级作用域
作为一个合格的程序员,当没有现成的轮子的时候,怎么办?当然是自己造轮子了啊
我们知道JS虽然没有块级作用域,但是有函数作用域啊
所以我们可以使用函数作用域来模仿块级作用域
首先我们要知道函数作用域和块级作用域的区别在哪里
和块级作用域相比,函数作用域无法就是多了一个函数名引用,占用的内存不会被自动回收嘛
那有一种函数不就很适合干这个事情嘛——匿名函数
现在还有一个问题,函数需要我们调用啊
也简单,我们使用函数表达式自执行不就完事儿了嘛
所以有代码如下:
(function(){
// ...
})();
PS. 只有函数表达式才能自执行,function声明的时候加()并不会立即执行,还会报错
将函数转为函数表达式的方法出来加小括号之外,JS中的一元操作符可以让函数转为函数表达式
! ~ + -

JS中的块级作用域就先讲到这啦~~ 明天再见
Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域的更多相关文章
- 《JavaScript高级程序设计》笔记:函数表达式(七)
递归 function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } ...
- Javascript高级编程学习笔记(24)—— 函数表达式(2)闭包
昨天的文章中主要记录了,函数表达式与函数声明的区别 以及在JS中如何安全地使用递归 那么既然要深入地理解JS中的函数,闭包就是一个绕不开的概念 闭包 JS高编一书中对闭包的概念定义如下: 闭包是指有权 ...
- Javascript高级编程学习笔记(6)—— 流程控制语句
话不多说,我们直接开始进入今天的主题 流程控制语句 首先什么是流程控制语句呢? 顾名思义,就是控制流程的语句. 在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指 ...
- Javascript高级编程学习笔记(10)—— 作用域、作用域链
昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声 ...
- Javascript高级编程学习笔记(23)—— 函数表达式(1)递归
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...
- Javascript高级编程学习笔记(26)—— 函数表达式(4)私有变量
私有变量 严格来讲,JS中没有私有成员的概念,所有对象属性都是公有的. 但是JS中有私有变量的概念 所有在函数中定义的变量都可以认为是私有变量,因为不能在函数外部进行访问 私有变量包括 1.函数参数 ...
- Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...
- Javascript高级编程学习笔记(7)—— 函数
前几天有事耽搁了,今天继续更新 今天的主要内容是JS中的函数 这一篇主要讲函数的定义等内容,至于变量提升.执行环境.闭包.内存回收等内容在后面讲,高玩们可以不用看下面的正文了. 函数 首先来讲,函数对 ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
随机推荐
- hive上传数据到oracle
# Oracle 建立hive外部表 使用oracle的大数据连接器向建立hive的外部表,在通过在oracle中根据外部表建立内部表(create table as select * from ex ...
- linux wc使用详解
转载:https://www.cnblogs.com/peida/archive/2012/12/18/2822758.html Linux系统中的wc(Word Count)命令的功能为统计指定文件 ...
- 欢迎来到Python世界
Python是一门优雅而健壮的解释型编程语言,它具有如下的特点: 易学 Python关键字少.结构简单.语法清晰.学习者可以在相对更短的时间内轻松上手. 易读 Python没有其它语言通常用来访问 ...
- css设置文本自动换行
.wrap-90 { display: inline-block; word-wrap: break-word;//对块级元素设置此属性 width: 90px;}
- SqlServer2012,设置指定数据库对指定用户开放权限
REVOKE VIEW ANY DATABASE TO [public] --这个是取消数据库公开的权限,也就是除了sa角色外任何人都不能查看数据库 -- 现在用sa用户登录Use [要开放权限的数据 ...
- Quartz的自定义插件
quartz本身插件: LoggingJobHistoryPlugin,LoggingTriggerHistoryPlugin分别可以打印scheduler容器管理的所有triggers和jobDet ...
- SVN与资源库同步后动作的字母意义
U:表示从服务器收到文件更新了G:表示本地文件以及服务器文件都以更新,而且成功的合并了A:表示有文件或者目录添加到工作目录R:表示文件或者目录被替换了C:表示文件的本地修改和服务器修改发生冲突
- OPENCV中特征提取和匹配的步骤
1.定义特征提取器和描述子提取器: cv::Ptr<cv::FeatureDetector> detector; cv::Ptr<cv::DescriptorExtractor> ...
- 【Python】 Python3 环境搭建
Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. Windo ...
- bugku题目“cookie欺骗”
先上成功截图 题目写的cookie欺骗,但其实是一道考察写脚本能力和代码审计类的题目,首先观察开始的页面 可以看到只有这一串字母,粗略观察可以认为这绝对不是密码,而是胡乱写上的字符,在观察页面源代码后 ...