博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中的函数作用域和声明提前
阅读量:4514 次
发布时间:2019-06-08

本文共 878 字,大约阅读时间需要 2 分钟。

在一些类C的编程语言中,花括号内的每一段代码都具有各自作用域,并且变量在声明他们的代码段之外是不可见的,这个概念叫做块级作用域

javascript中没有块级作用域的概念,有的是函数作用域的概念:变量在声明他们的函数体内部的任何位置(包括这个函数体嵌套的任何函数体内)都是可读取的

var k = "k";            if(1===1){                var j ="j";                for (var i = 0; i < 3; i++) {                    console.log(i);                }                console.log(i);//输出3,表明i不仅仅在循环中有定义,在代码段中也有定义            }            console.log(j);//输出j:表明j在不仅仅在代码段内有定义            console.log(i);//输出3:表明i在循环中有定义,在代码段中有定义,另外在整个函数体各处都有定义            console.log(k);//输出k:很明显是在整个函数各处都有定义

简单的说,上面的在不同位置定义的三个变量:i,j,k都是同一个作用域--整个函数体。由于这个原因,这就意味着变量在声明之前甚至已经可用了。这个特性叫做声明提前。

比如下面这个例子,myfield为全局变量,在自定义函数中使用输入的时候,直接输出为此变量的当前值

但是如果在函数中声明了一个同名的局部变量,如果这个局部变量的声明语句在变量使用之后,如下图所示的输出结果可能和自己想象中的不太一样。

出现这个现象的原因是,局部变量在整个函数体中有定义,这个局部变量遮盖了全局变量。局部变量的声明提前了,但是变量的初始化并没有提前,还是在原来的位置。

因此,上面这段代码等价于如下:

  

转载于:https://www.cnblogs.com/xtechnet/p/3440344.html

你可能感兴趣的文章
类里的方法要不要加参数
查看>>
C#毫秒转时分秒格式
查看>>
flask SQLAlchemy pymysql 连接数据库
查看>>
Mac 域名解析
查看>>
ios ViewController present不同的方向
查看>>
未知宽高元素水平垂直居中
查看>>
while 、函数、参数
查看>>
POJ 2762 Going from u to v or from v to u?(Tarjan + 拓扑排序)
查看>>
洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
查看>>
BZOJ4293: [PA2015]Siano
查看>>
java第五次实训作业异常处理
查看>>
linux常用命令总结(含选项参数)
查看>>
Why validation set ?
查看>>
2019-04-01 为什么零售业务流行起来了?
查看>>
一般处理程序、Ajax多图片上传带进度条
查看>>
kafka清理
查看>>
Jenkins 踩过的坑之再总结
查看>>
揭露QPS增高后的秘密
查看>>
行转列-
查看>>
这是第二波java笔记
查看>>