马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小脑斧 于 2020-5-4 21:56 编辑
都晓得预解析是提前解析代码。so看看下面代码,结果是多少呢
- f1();//调用
- function f1() {
- console.log(num);
- var num=10;
- }
复制代码 相信自己第一感觉,是不是觉得答案是:10?
再来试试这个:- f1();//调用
- var num=20;//这个变量的声明会提升到变量使用之前
- function f1() {
- console.log(num);
- //var num=10;
- }
复制代码结果是20?
其实两个代码的结果应该是:undefined,undefined
why????
解释: 预解析是会将声明提前到当前作用域之前,实际第一个的代码顺序如下: - function f1() {
- var num;
- console.log(num);//结果已经输出,赋值失败
- num=10;
- }
- f1();
复制代码 那个num的值怎么没有输出,关键:预解析只会将声明提前,不会将赋值提前,对于没有赋值的num输出当然是undefined;
第二个代码,解析顺序如下:
- var num;//这个变量的声明会提升到变量使用之前
- function f1() {
- console.log(num);
- }
- f1(); //调用
- num=20;
复制代码
结果很明显:undefined
如有错误,欢迎敲打
|