正在回答
3回答
同学你好,对于你的问题解答如下:
1、下图代码中,声明函数func的时候,定义了形参a,此时相当于在func函数内部内部声明了一个局部变量a, 此时函数内部的a =6 这句代码不是新定义一个变量,而是给函数内部的局部变量a赋值,不会影响到全局变量a的值,a的值还是5。所以调用函数之后,输出的全局变量a的值为5
2、当定义函数不设置形参时,此时函数内部不使用var声明的变量,才是全局变量,同学可以结合下面的代码对比理解下,示例:
控制台输出结果:
祝学习愉快~
好帮手慕慕子
2021-03-29 11:10:35
同学你好,对于你的问题解答如下:
1、预解析中的提升,只针对var关键字声明的变量和function关键字声明函数,所以不用var定义的变量a,在预解析阶段不会进行提升的。
2、预解析阶段只提升变量,在执行代码的时候才会给变量赋值,示例:
上图中的代码,预解析阶段会提升变量a,所以在声明变量之前输出a不会报错,输出结果为undefined,执行完var a = 1 之后,才表示给a赋值1,所以在这之后才可以输出a的值为1,如下图所示:
经过上诉分析可知,本题代码中, a = 34 这句代码没有使用关键字var声明,所以预解析阶段并不会进行变量的提升。
因为定义函数时,设置了形参a,相当于在函数内部声明了一个局部变量a,此时函数内部就不会再沿着作用域链向外查找全局作用域的同名变量a,而调用fn函数时,没有传入值,所以函数内部在a =34之前输出a的值为undefined。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星