小脑斧 发表于 2020-5-1 20:10:38

JS.002:关于预解析需要注意的那点事

本帖最后由 小脑斧 于 2020-5-4 21:56 编辑

都晓得预解析是提前解析代码。so看看下面代码,结果是多少呢{:10_279:}
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????{:10_277:}

解释:预解析是会将声明提前到当前作用域之前,实际第一个的代码顺序如下:function f1() {
var num;
console.log(num);//结果已经输出,赋值失败
num=10;
}
f1();那个num的值怎么没有输出,关键:预解析只会将声明提前,不会将赋值提前,对于没有赋值的num输出当然是undefined;

第二个代码,解析顺序如下:
var num;//这个变量的声明会提升到变量使用之前
function f1() {
console.log(num);
}
f1(); //调用
num=20;

结果很明显:undefined


如有错误,欢迎敲打{:10_256:}


练习1:


var num=20;
function f1() {
//var num;
console.log(num);
}
f1();运行结果:20         



进阶练习1:
console.log(a);
function a() {
console.log('aaaaa');
}
var a = 1;
console.log(a);结果:a(),1

解析过程如下:
var a;
function a() {
console.log('aaaaa');
}
console.log(a);//此时的a是a();所以输出a().
a=1;//赋值
console.log(a);//a=1进阶练习2:
f1();
console.log(c);// 9
console.log(b);// 9
console.log(a);//报错
function f1() {
var a=b=c=9;//局部变量
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
解析如下:
function f1() {
var a;//局部变量
a=9;
b=9;//b,c都是隐式全局变量,外部也可访问
c=9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);// 9
console.log(b);// 9
console.log(a);//报错

注意:变量声明和函数声明都提前时,变量声明在前。      
   var a=b=c=9; //var只对第一个a起作用


如有错误,欢迎敲打{:10_256:}




Hello. 发表于 2020-5-1 20:16:30

{:10_275:}

liuzhengyuan 发表于 2020-5-1 20:24:51

本帖最后由 liuzhengyuan 于 2020-5-1 20:29 编辑

Hello. 发表于 2020-5-1 20:16


你们都是怎么分页的?

Hello. 发表于 2020-5-1 20:26:31

liuzhengyuan 发表于 2020-5-1 20:24
你们都是这么分页的?

liuzhengyuan 发表于 2020-5-1 20:28:57

Hello. 发表于 2020-5-1 20:26


打错了{:10_245:}
应给是“怎么”{:10_277:}

小脑斧 发表于 2020-5-1 20:38:37

本帖最后由 小脑斧 于 2020-5-1 20:41 编辑

liuzhengyuan 发表于 2020-5-1 20:24
你们都是怎么分页的?
有个分页按钮,图里第一个就是

liuzhengyuan 发表于 2020-5-1 20:42:19

小脑斧 发表于 2020-5-1 20:38
有个分页按钮,图里第一个就是

wow,谢谢{:10_257:}

小脑斧 发表于 2020-5-1 21:17:00

Hello. 发表于 2020-5-1 20:26


你的图片是直接粘贴还是上传图片显示的?我每次都得截屏保存图片再上传

Hello. 发表于 2020-5-1 21:57:06

小脑斧 发表于 2020-5-1 21:17
你的图片是直接粘贴还是上传图片显示的?我每次都得截屏保存图片再上传

上传
页: [1]
查看完整版本: JS.002:关于预解析需要注意的那点事