问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求大侠解释如下js代码,关于变量作用域

发布网友 发布时间:2022-04-27 03:29

我来回答

3个回答

热心网友 时间:2022-05-14 15:16

在js中,函数的定义会在编译期确定函数的存在。你可以认为函数被提升到整个js部分的顶部去了。var 声明的变量也会在编译期就绑定到对象上,但值要在执行的时候才能赋予,在执行赋值之前,对象虽然有了某个变量,但该变量的值会是undefined。

来看你的这个代码:
因为sayHi函数在编译的时候就已经被声明了。也就是说,以上来执行sayHi是可以的,同样此时sayHi是确定了的。在sayHi中,首先把全局变量a的值加了10,然后赋值给a,这样全局的a的值就成了20。然后立即alert出a的值,也就是第一次弹出20。

接下来是函数定义,可以跳过。

然后又一次调用了alert(a),此时a的值还是20,所以第二次弹出20。

最后一句是弹出sayHi() + 10,而在弹出这个结果之前,首先要执行以下sayHi函数。在这个函数里,再次给全局a增加了10,也就是a的值变成了30,然后弹出a的值,也就是第三次弹出的是30。

sayHi的返回值也是30,那么最后一句就成了alert(30 + 10),也就是第四次弹出40。

热心网友 时间:2022-05-14 16:34

你好,其实你只要跟踪一下变量a就可以知道:

var a = 10;

sayHi();//sayHi里面执行了一次a=a+10;并且在sayHi里alert(a)此时a=20

function sayHi()

{

a = a + 10;

alert(a);    

return a;

}

alert(a);//此时a=20 

alert(sayHi()+10); //sayHi里又执行了一次a=a+10;此时a=20+10=30,因为作为函数参数的sayHi具有运行优先权,所以在此时alert(a)是sayHi()里的,所以输出30,最后执行外面的alert(30+10),输出40.

必须要理解的一点就是:

作为函数的function,只有被调用的时候才会去执行function里面的内容,当没有被调用时,function只是相当于做了一个声明,里面的过程(代码)是不会执行的;
而每一次被调用时,都会再去执行一次function里面的过程。【理解了最后这点,就能理解a为什么会是20-20-30-40了】

与你同样结构的程序,换成C、java、php。。。等语言,作为全局变量的a的值变化也是同样的。

热心网友 时间:2022-05-14 18:08

var a = 10;

sayHi();//--第三次

function sayHi()

{

a = a + 10;

alert(a); //--第一次

return a;

}

alert(a); //--第二次

alert(sayHi()+10);//--第四次
1JavaScript是逐行解释执行
2切方法调用是在解释之后统一执行。追问大侠,其实一开始我的疑惑就在这里。函数应该是先定义,再执行,它这里上来就sayHi()函数执行了。再定义,函数sayHI()内部的a不就么有定义了,虽然是全局的。你说一切方法是在解释了之后再统一执行。那sayHI()为什么顺序是第三次呢?还是不大清楚,求指点,谢谢

追答这是解释JS的引擎的内部机制决定的,第一次和第二次都是在解释阶段就能执行的,而第三次和第四次有自定义方法,引擎不确定有没有就等解释阶段完成后执行,而自定义方法也是从上到下执行的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 javascript作用域问题 JavaScript权威指南 清晰版 javascript权威指南 学习笔记之变量作用域分享 猫大叔加盟是如何做有品质的无骨烤鱼饭? 鱼你在一起用的什么鱼呢? 清蒸巴沙鱼营养美味,无骨无刺非常适合孩子吃的鱼,看完收藏了 充电冲的慢 华为手机充电冲到100好还是不冲到100%好? 为什么外面凡是点巴沙鱼烤鱼都是没有骨头?或者没什么骨头,点草鱼,鲩鱼都是很多骨头,这是为啥? 手机充值冲错了可以转冲吗? 巴沙鱼骨和头能煮汤吗? 为什么座充冲原装电池充不进电,充不是原装的电池就冲得进去? 手机充电冲到80多拔下来会有影响吗 电瓶正充冲不进去反充能充是怎么回事 手机电池充电冲坏了 充电宝为什么给手机充电冲充着冲充着就暂停了,得重新按下才能继续充,充电宝最多能给手机充几次电啊? 48v8安锂电池充冲三个半小时满正常吗 求助】手机线充冲不进电 万能充可以充 这是为什么?纠结啊 洛阳充冲充充电站有限公司怎么样? 梦到生病的亲人脸色惨白,是不是不好的梦? javascript setInterval()变量作用域问题 求《JavaScript权威指南第六版》全文免费下载百度网盘资源,谢谢~ 关于javascript作用域和局部变量如何影响全局变量的问题?谢谢! Javascript权威指南的作品目录 窗帘布灰色和蓝色拼接,床靠背用什么颜色搭配好看? 灰色加蓝色是什么颜色? 灰色和蓝色拌起来的色叫什么色? 男生,深蓝色和灰色拼色的外套以及军绿色裤子,这样穿搭配么?皮肤白 窗帘是灰蓝拼接色沙发是深灰色地砖是米*背景墙选什么颜色好? 灰色蓝色红色混在一起是什么颜色 窗帘拼色,一深一浅,蓝色是深,灰色是浅,这两个颜色哪个做主布好?墙报是浅色的偏灰 色的叠加:蓝色和什么颜色混合可以得到灰色? 支付宝网商贷的日利率怎么提高了,我以前才0.22%,刚才去看了下变0.433%... 支付宝网商贷的日利率为什么提高了? 网商贷为啥用着用着就涨利息了? 我的支付宝网商贷利率一直都是0.02怎么突然涨到0.04了? 为什么女人来月经前会长痘吗?是你的身体出现了问题? 为何来姨妈前一周老是冒痘痘?怎么避免? 来姨妈前疯狂长痘,吃什么食物可以调节? 小豆芽老师:女生大姨妈来前为什么会长痘痘