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:}
{:10_275:} 本帖最后由 liuzhengyuan 于 2020-5-1 20:29 编辑
Hello. 发表于 2020-5-1 20:16
你们都是怎么分页的?
liuzhengyuan 发表于 2020-5-1 20:24
你们都是这么分页的?
√ Hello. 发表于 2020-5-1 20:26
√
打错了{:10_245:}
应给是“怎么”{:10_277:} 本帖最后由 小脑斧 于 2020-5-1 20:41 编辑
liuzhengyuan 发表于 2020-5-1 20:24
你们都是怎么分页的?
有个分页按钮,图里第一个就是 小脑斧 发表于 2020-5-1 20:38
有个分页按钮,图里第一个就是
wow,谢谢{:10_257:} Hello. 发表于 2020-5-1 20:26
√
你的图片是直接粘贴还是上传图片显示的?我每次都得截屏保存图片再上传 小脑斧 发表于 2020-5-1 21:17
你的图片是直接粘贴还是上传图片显示的?我每次都得截屏保存图片再上传
上传
页:
[1]