变量作用域

来源:互联网 发布:算法流程图怎么画 编辑:程序博客网 时间:2024/06/01 12:54

一、

var num=10;fun();function fun() {    console.log(num);//输出undefined;    var num=20;}

说明:在JS中有一个解析器,其解析过程如下:
1、预解析(全局作用域中)
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

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

2、从上到下一行一行执行代码
针对上面的代码:先执行num=10;接着是fun()函数,然后就进入了fun()的局部作用域内,又开始了新一轮的解析过程
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

var numconsole.log(num);num=20;

2.2)从上到下一行一行执行代码;
故执行结果是undefined.
二、

var a=18;f1();function f1() {    var b=9;    console.log(a);    console.log(b);    var a='123';}

解析如下:1、预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

var a;function f1() {    var b=9;    console.log(a);    console.log(b);    var a='123';}a=18;f1();

2、从上到下一行一行执行代码
针对上面的代码:先执行a=18;接着是f1()函数,然后就进入了f1()的局部作用域内,又开始了新一轮的解析过程
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

var b;var a;b=9;console.log(a);console.log(b);a='123';

2.2)从上到下一行一行执行代码;
故执行结果是//undefined,//9
三、

f1();console.log(c);console.log(b);console.log(a);function f1() {    var a=b=c=9;    console.log(a);    console.log(b);    console.log(c);}

解析过程如下:1、预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

function f1() {    var a=b=c=9;    console.log(a);    console.log(b);    console.log(c);}f1();console.log(c);console.log(b);console.log(a);

2、从上到下一行一行执行代码
针对上面的代码:先执行f1()函数,然后就进入了f1()的局部作用域内,又开始了新一轮的解析过程.
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。

var a;a=b=c=9;console.log(a);console.log(b);console.log(c);

2.2)从上到下一行一行执行代码;
故执行结果是//9,//9,//9,//9,//9,//a is not defined

0 0