猿问

js在函数中 创建变量 和 引用变量 实质上的执行过程是怎么样的?

刚开始学习js 对于Js的执行过程有很大的疑虑
创建和引用 是否 是完全不同的概念 下面贴出了自己的实验代码和猜测 想请问各位 自己的猜测是否正确 如果是错的 那么到底是如何的一个过程呢?
全局变量是不是一块公共的区域 里面有着一块块的变量?


var num = 123;

function f1() {

    console.log( num );

}

function f2() {

    num = 456;

    f1();

}

f2();

console.log(num);


//首先执行f2 看见一个全局变量num 他得去全局变量的区域内找找有没有 有就覆盖修改 没有就创建 找到了 在外面 虽然他用var 但并没有fn包含他 所以也是全局变量 修改他 之后f1输出为456





var num = 123;

function f1() {

    console.log( num+"f1" );

}

function f2() {

    var num = 456;

    f1(num);

    console.log(num+"f2");

}

f2();


//猜测 运行到F2的时候 因为声明的是局部变量 首先在自己的函数域内查找 num 没找到 那么就创建在函数域内创建一个num 为 456



//所以二者的差别就在于 一个去外面找了 找到了修改他  而另外一个呢 没有去外面找自己创建了一个


//在创建的情况下 他会在根据变量的类型 在公共全局变量里寻找是否有已经定义的变量 有>修改 无>创建

// 如果是局部变量 在自己的函数域内去创建 or 修改


//但是变量的引用不一样 如果找到了>使用他 没找到>通过函数链 去上一级寻找


//所以在引用和创建的时候 他的行为是不同的


慕的地10843
浏览 584回答 1
1回答

慕运维8079593

变量的查找分为LHS和RHS,当需要一个变量存储东西时使用的是LHS,当需要一个具体的值时使用的是RHS例如:num = 123,对num就是进行LHS查找,console.log(num),对num使用的是RHS查找上面的所有的查找都是沿着作用域链从上往下查找,在当前作用域没有找到时,会到上层作用域查找。var num = 123;function f1() {    console.log( num ); }function f2() {     num = 456;     f1(); } f2();console.log(num);变量提升:声明了num,f1,f2初始化 num = 123执行f2:创建f2的作用域链,沿作用域链查找num,在f2的作用域中没有找到,去外部作用域查找,找到了,执行num = 456运行f1:查找f1函数,在f2的作用域中没有,到外部作用域中有,执行。在f1中需要RHS查找num,同样在全局作用域找到的运行最后一行的console.log(num)而你的第二个,就是在函数作用域中找到了num
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答