3.1 函数中的作用域

  (1)JavaScript具有基于函数的作用域,每声明一个函数的时候会为其自身创建一个‘气泡’,这个气泡内声明的变量或函数外界无法访问。

函数作用域的含义是指,属于这个函数的全部变量都可以在整个函数范围内使用及复用(事实上在嵌套的作用域中也可以使用)。

3.2 隐藏内部实现

  例子:

var a = 666;function sum(b){return a + b;
}function test(){var b = sum(5) + 10;  console.log(b);
} 

  这个例子中变量a和方法sum实际上只会在方法test中使用,依照最小特权原则

最小特权原则也称为最小授权原则和最小暴露原则,这个原则是指在软件设计中,应该最小限度的暴露必要的内容,将不必暴露的内容隐藏起来。

  以上实例应该改为:

function test(){var a = 666;function sum(b){return a + b;}var b = sum(5) + 10;console.log(b);
} 

3.3 函数作用域

  将任意代码添加添加包装函数,可以将其中的变量和函数隐藏起来,外部作用域无法访问包装函数里面的变量和函数。

var a = 2;function foo(){var a = 3;console.log(a);    //3
}foo();console.log(a);     //2

  但是还有点不好的地方,实际上还是创建了一个外部的foo函数,它本身就污染了所在作用域,

  且需要在后面调用执行。这个时候可以使用IIFE(自执行),改为:

var a = 2;;(function(){var a = 3;console.log(a);   //3
})();console.log(a);    //2

3.4 块作用域

  JavaScript中实现块作用域有以下几种方式:

    with:用with从对象中创建出来的作用域仅在with声明中有效,外部无效。

    try/catch:ES3规范中规定,try/catch的catch语句会创建一个块级作用域,其中声明的变量只在catch语句中有效。

    let:let可以将变量绑定到所在的任意作用域中,也就是说,let声明的变量,隐式的绑定在本身所在的作用域中。

const:声明一个不可修改的变量

//便于可读,我们可以显示的为块作用域添加块var a = true;if(a){{    //显示的创建块let b = 666;console.log(b);}
}

  总结:JavaScript是基于函数作用域的,每次声明一个函数,函数中包含的变量和函数外部作用域无法访问。我们可以通过包装函数将不必要对外暴露的变量或函数包装隐藏起来。也可以通过IIFE(自执行函数)来隐藏变量和函数。js中的块级作用域实现方式有with(不要使用),try/cath的cath语句,let,const等。

转载于:https://www.cnblogs.com/huangzhenghaoBKY/p/9798542.html

学习笔记=《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域...相关推荐

  1. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  2. 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计

    机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计 3.1 离散时间的批量估计问题 3.1.1 问题定义 3.1.2 最大后验估计 3.1.3 贝叶斯推断 3.1.4 存在性.唯一性与能观 ...

  3. js 红宝书学习笔记精简版 第一至三章

    注: 本文js代码均已在本地实现过,如有异常问题,请在评论区留言.ctrl+f 可搜索有效内容, 加粗为重点 蓝色字体 为重中之重 (一) 什么是js 1995 年,JavaScript 问世. 完整 ...

  4. 【Python学习笔记—保姆版】第三章—Python流程控制、函数的定义、常见错误、模块与包、类

    第三章-python函数.分支结构 流程控制 if-else for 循环 while循环 continue/break range()函数 列表与元组遍历 练习 函数的定义 变量作用域 基本形式 函 ...

  5. MYSQL学习笔记(自用)第三章

    第三章 第一节. 列属性| Column Attributes[插入,更新和删除数据] ## VARCHAR(50) = 字符串 (最多50个) ## PK = primary key(主键) ## ...

  6. 【学习笔记】数据库系统原理 第三章 SQL语言

    以下内容为参考课件和<数据库系统概论>(第5版,王珊等著)的个人整理,若有错误欢迎指出 第三章 SQL语言 文章目录 第三章 SQL语言 一.概述 二.数据查询功能 1.查询语句 2.连接 ...

  7. JS学习笔记:Javascript给对象增加属性(函数作为属性)

    //给对象增加属性(函数作为属性) let person1 = {};// 增加属性 person1.firstName = "John"; person1.lastName = ...

  8. 200530你不知道的JavaScript[上卷]所有小结汇总

    JS上卷整理 说点啥 1504的书,现在(2005)才想起好好看,过去5年零1个月了,证明自己的技术能力真是水了5年多.抓紧补齐吧. S11 表示 <不知道系列> 上卷 第一部分 第一章 ...

  9. web前端学习笔记之JavaScript

    文章目录 1 JavaScript简介 2 JS基础 3 JS代码编写位置 3.1 行内式 3.2 内嵌式 3.3 外联式 4 基本语法 5 字面量和变量 5.1 字面量 5.2 变量 6 标识符 7 ...

最新文章

  1. 海量数据处理:从并发编程到分布式系统
  2. Fedora17 开启ssh服务
  3. openssl创建CA、申请证书及其给web服务颁发证书
  4. system函数 与 exec函数的区别
  5. java foward_java 中sendredirect()和forward()方法的区别
  6. SQL Server 数据库文件管理
  7. angularjs入门学习【应用剖析中篇】
  8. canal mysql多节点_数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!...
  9. 打脸了!中通快递曾否认用假人充当安检员,官方反手一记实锤
  10. Python风格总结:函数
  11. 《Web Load Testing For Dummie》读书笔记
  12. mysql 逻辑备份工具_MySQL逻辑备份工具-mydumper
  13. ActivityGroup简介
  14. 免费可商用中文字体打包下载
  15. 目前主流的电脑操作系统
  16. gphp32.exe是什么文件?
  17. Python商品数据预处理与K-Means聚类可视化分析
  18. 跨境电商RPA是什么意思?用PRA工具能做啥?
  19. 使用伪类来实现类似微信群聊的头像样式
  20. Qt去除libpng warning: iCCP: known incorrect sRGB profile警告

热门文章

  1. php 一些个 常用 函数
  2. Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程
  3. 排序第一天,回忆关键字
  4. 【Daily Scrum】12-08
  5. J2SE J2EE J2ME的区别
  6. JS 学习笔记--11---内置对象(Global/Math)
  7. 网络爬虫--25.【selenium实战】实现拉勾网爬虫之--selenium获取数据
  8. 趣解 XSS和CSRF的原理
  9. Ubuntu 14.04下安装Redis报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决
  10. java伪协议_通过伪协议解决父页面与iframe页面通信的问题