javascript执行上下文、作用域与闭包(第二篇)---作用域_js中的作用域 闭包_iamchuancey的博客-程序员秘密

技术标签: 函数  闭包  作用域  javascript  执行上下文  

首先,提到作用域,要了解一个常识:

javascript中没有块级作用域,只有函数作用域和全局作用域。

什么是块级作用域?块级作用域就是定义在{}之内的范围,比如if(){}或者for(){}里那个{}里的范围就叫做块级作用域。

如:if(){}


      if(0 < 2) 
        {  
        var name = "jeri"; 
        }
      alert(name);//jeri,

for(){}

for(var i=0;i<9;i++)
{
}
alert(i);//9

我们在编写代码的时候,不要在“块”里面声明变量,要在“块”开始的地方就声明好,以免出现错误,如:

var i;
for(i=0;i<9;i++)
{

}
alert(i);//9

所以,在声明变量时,我们要做到,全局变量要在代码前端声明,函数中的变量要在函数体一开始的地方就声明好。除了这两个地方,其他地方都不要出现变量声明。

下面来说作用域,简单的说,作用域相当于一个区域,就是为了说明这个区域有多大,而不包括这个区域里有什么东西。这个区域里有什么东西恰恰就是这个作用域所对应的执行上下文所要说明的东西。如:

这里写图片描述

作用域有上下级的关系,上下级关系的确定就看函数是在哪个作用域下创建的。例如,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。(也可以说父子关系)

我们知道,作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

另外,我们还需牢记于心的是,作用域是在函数创建的时候就已经确定了,而不是函数调用的时候。

函数创建和函数调用可是两个不同的概念,函数创建就是定义一个函数,函数调用是在某处调用一个已经定义好的函数。下面举一个例子来说明:

function foo() //函数创建,定义了foo函数,而foo函数的作用域也在此时确定了
{
     
alert("buddy!");
}
alert("hey!");
foo();//调用函数,这里调用foo函数

作用域的概念很好理解,到这就结束了,下一篇将会讲作用域链与自由变量。


下一篇: javascript执行上下文、作用域与闭包(第三篇)—自由变量与作用域链

本文参考了王福朋老师的深入理解javascript原型和闭包(13)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IamChuancey/article/details/78235253

智能推荐

stm32 Cubemx Lwip裸机测试ping不通,不亮灯_mx_lwip_init_木子临枫的博客-程序员秘密

本人遇到STM32F767IGTx使用CubeMX ETH_-RMII-LWIP 裸机测试无法正常ping解决方案,且指示灯不亮使用正点原子STM32F767开发板通过CubeMX 配置ETH-RMII-LWIP1.原理图特别注意 ETH_RESET 使用的PD3 正点原理通过pcf8574连接PD3.一定要初始化.2.时钟配置3.ETH配置4.LWIP配置,不使用DHCP...

HDU ACM2090——算菜价_杭电acm算菜价_BarisGuo的博客-程序员秘密

算菜价Problem Description妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。Input输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价...

06-U-Boot2017.01读取uEnv.txt过程_夏夜晚风_的博客-程序员秘密

文章目录 uboot读取uEnv.txt的过程如下:/*********************************************** 加载uEnv.txt***********************************************/ s ==== fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile} /*...

远程 命令/代码 执行(remote command/code execute)漏洞总结_远程代码执行漏洞_未完成的歌~的博客-程序员秘密

这周来学习下命令执行漏洞;命令执行漏洞是用户通过浏览器在远程服务器上执行任意系统命令,与代码执行漏洞没有太大的区别,不过我们在学习时还是要区分不同的概念。关于代码执行漏洞会在下篇博客中详述。一、什么是命令执行漏洞:应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时...

mysql exec_time很长,MySQL Replication--复制延迟之exec_time测试_慕粒粒粒粒的博客-程序员秘密

复制延迟(Seconds_Behind_Master)测试测试环境: MySQL 5.7.19测试主从时间差:检查主从系统时间差,同时在主库和从库执行SELECT NOW()语句:主库:2019-06-24 10:57:56从库:2019-06-24 10:58:10从库比主库提前14秒,主从时间差14秒。在主库上执行(使用基于语句格式复制BIN):select now();update tb00...

python可视化(案例)高颜值图的复现(学术论文、商业周刊)_遥远的小宇的博客-程序员秘密

前文的两个案例虽用的都是虚拟数据集,但都有一定的针对性,案例 水果分类(香蕉、苹果大战) 中,讨论了一个分类问题,并对散点图、直方图、箱线图和等比例子图的应用做了探讨;案例 多元线性回归 中,讨论了一个回归问题,并对散点图能最大限度可视化数据的维度做了探讨;以上案例涉及算法的部分,如有难度,可自行忽略,因为本系列主要是针对可视化的,案例的目的是为了赋予一个场景,方面对可视化内容的直观理解。本文通过复现1张学术论文图及3张商业周刊图,加深对面积图、折线图、填充图等绘图对象及不等比例子图、栅格子图合并内容的理

随便推点

Python实现员工管理系统GUI_员工工资管理系统python_oli丶的博客-程序员秘密

Pyside2 +pymysql 完成员工管理系统GUI提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、前期准备二、使用步骤1.引入库2.读入数据总结前言 当今世界应用计算机已经变得十分普遍了,如同汽车一样已经普及到各家各户。在许多工作行业各自的领域上,行内竞争十分关键,谁掌握的知识多,信息量大,处理数据的速度快,谁就能在激烈的行内竞争中立于不败之地。越来越多的企业管理员意识到了信息管理的重要性,所以说信息化是当今世界发展的主流。因此,一个良好的员工管理系统对企业

yii2 gridview 中 filter设置带搜索的下拉框[转载]_yii2 grid filter_willeny的博客-程序员秘密

原文地址:https://stackoverflow.com/questions/36937615/kartik-select2-as-filter-input-in-yii2-grid代码如下: 引入select2插件:use kartik\select2\Select2;具体代码: ['attribute' =&amp;gt; 'bank_id', ...

Lintcode 数组剔除元素后的乘积_python 数组剔除元素后的乘积_水果先生的博客-程序员秘密

题目给定一个整数数组A。定义B[i] = A[0] * … * A[i-1] * A[i+1] * … * A[n-1], 计算B的时候请不要使用除法。样例给出A=[1, 2, 3],返回 B为[6, 3, 2]class Solution {public: /** * @param A: Given an integers array A * @return: A l

BZOJ 2683: 简单题(CDQ分治 + 树状数组)_weixin_30648963的博客-程序员秘密

题意你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作:命令参数限制内容\(1\ x\ y\ A\)\(1\le x,y \le N\),A是正整数将格子\(x,y\)里的数字加上\(A\)\(2\ x1\ y1\ x2\ y2\)\(1\le x1\le x2\le N,1\le y1\le y2\le N\...

ADS129X芯片中文资料(三)——数字功能部分介绍_Lostin_sakura的博客-程序员秘密

写在前面:最近做项目用到TI公司的用于生理信号测量的低功耗、8通道、24位模拟前端的ADS1298芯片,于是研究了下芯片手册。一百多页的芯片手册,经常看过后又记不清了,每次都得重新去翻阅,所以整理成中文的,翻遍查阅。在此分享给同样有需求的人,如有错误,恳请指出,谢谢!这是关于该芯片资料的第三部分内容,数字功能的介绍以及第四部分的内容(编程部分的介绍)很重要,涉及到该如何编程该芯片,以及如何设置参数,如何根据应用选择不同模式等。可以配合芯片手册最后的寄存器表进行阅读,这样能更快理解并知道如何编程。.

工厂方法模式-日志工厂_程序员小潘的博客-程序员秘密

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

推荐文章

热门文章

相关标签