首页 新闻 搜索 专区 学院

关于变量提升问题

0
[待解决问题]

var num=10;
fun();
function fun(){
consonle.log(num);
var num=20;
}

请问为什么输出的num 不是等于10而是undefied;num=10不是全局作用域吗,为什么函数内部不是使用

橘子好甜的主页 橘子好甜 | 菜鸟二级 | 园豆:206
提问于:2020-08-02 15:00
< >
分享
所有回答(3)
0

终于明白了!!
根据作用域链,console.log(num)输出的num会先查找function里面声明的var num;而此时num没有定义,所以返回的是undefied

橘子好甜 | 园豆:206 (菜鸟二级) | 2020-08-02 15:10
0

因为函数外部是全局作用域,函数内部是函数作用域,函数作用域内num变量提升,等于先声明,在console下面被赋值成20,console输出时先找自身作用域找到num输出,函数内部没有定义这个变量它才会去外面寻找,读取变量会优先在自身作用域中寻找

Genius丶Z | 园豆:217 (菜鸟二级) | 2020-08-03 11:46
0

var num=10;
fun(num);
function fun(num){
consonle.log(num);
var num=20;
}
这样就可以了,哈哈哈,答非所问

myzy | 园豆:123 (初学一级) | 2020-08-03 18:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册