首页 新闻 搜索 专区 学院

关于变量提升问题

0
[待解决问题]

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

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

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

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

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

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

Genius丶Z | 园豆:235 (菜鸟二级) | 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
0

方法体是个独立的作用域,独立解析内部js代码,内部没有时,再往上找
console.log(num);
var num=20;
解析器先读取声明赋值undefined,再逐行执行

觉信 | 园豆:64 (初学一级) | 2020-08-08 10:51
0
var num=10;
fun();
function fun(){
  var num
  consonle.log(num);
   num=20;
}

你可以把程序看成上面的样子,fun函数内部先检索到了内部的num声明,在打印的时候num已经声明但是还未定义,所有打印出来是undefined

Lsever | 园豆:112 (初学一级) | 2020-10-14 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册