JavaScript的作用域链是在函数定义时确定还是在调用时?

查看:144
本文介绍了JavaScript的作用域链是在函数定义时确定还是在调用时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看到如下的一个闭包问题

var x=10;
function fn() {
    console.log(x);
}

function show(f) {
    var x=20;

    (function() {
        f();
    })();
}
show(fn);

打印的是10而不是20,x在取值时不是沿着作用域链向上寻找吗,如果作用域链是在函数创建时确定结果就是10,如果是在调用时确定就应该是20,有没有关于作用域链准确的说法?这里准确的作用域链应该是什么样的?fn和show处于同一级还是fn在show内?

解决方案

作用域链是在函数定义的时候确定的.

在函数内定义的变量不能在函数之外的任何地方访问,因为变量仅仅在该函数的域的内部有定义。相对应的,一个函数可以访问定义在其范围内的任何变量和函数。换言之,定义在全局域中的函数可以访问所有定义在全局域中的变量。在另一个函数中定义的函数也可以访问在其父函数中定义的所有变量和父函数有权访问的任何其他变量。

https://developer.mozilla.org...

这篇关于JavaScript的作用域链是在函数定义时确定还是在调用时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆