前景提要
关于变量提升问题
0 [待解决问题] var num=10;
fun();
function fun(){
consonle.log(num);
var num=20;
}
请问为什么输出的num 不是等于10而是undefied;num=10不是全局作用域吗,为什么函数内部不是使用 javascript 橘子好甜 | 菜鸟二级 | 园豆: 206
提问于:2020-08-02 15:00 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(4) 0 终于明白了!!
根据作用域链,console.log(num)输出的num会先查找function里面声明的var num;而此时num没有定义,所以返回的是undefied 橘子好甜 | 园豆:206 (菜鸟二级) | 2020-08-02 15:10 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 因为函数外部是全局作用域,函数内部是函数作用域,函数作用域内num变量提升,等于先声明,在console下面被赋值成20,console输出时先找自身作用域找到num输出,函数内部没有定义这个变量它才会去外面寻找,读取变量会优先在自身作用域中寻找 Genius丶Z | 园豆:233 (菜鸟二级) | 2020-08-03 11:46 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 var num=10;
fun(num);
function fun(num){
consonle.log(num);
var num=20;
}
这样就可以了,哈哈哈,答非所问 myzy | 园豆:123 (初学一级) | 2020-08-03 18:04 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 方法体是个独立的作用域,独立解析内部js代码,内部没有时,再往上找
console.log(num);
var num=20;
解析器先读取声明赋值undefined,再逐行执行 觉信 | 园豆:64 (初学一级) | 2020-08-08 10:51 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。