js常用词汇(js词法解析)

图片授权基于:CC0协议

作用域有两种模型,词法作用域(Lexical Scope)和动态作用域(Dynamic Scope),JavaScript 是词法作用域。

词法作用域也叫静态作用域:在定义变量和函数的时候就确定了访问权限,由变量和函数的位置来决策作用域,「JavaScript 变量生命周期在它声明时初始化」。

内部声明,外部不可用

function foo() {    var x = 1;}console.log(x);// x is not defined

foo()函数定义的 x ,只能在 foo() 内部使用,外部获取不到。

变量就近原则

var x = 1;function foo() {    var x = 2;    console.log(x);}foo(); // 2

foo() 内部定义的 x 会屏蔽外部相同变量,一旦找到第一个匹配,那就不再继续向上查找。

向上查找

来源于《你不知道的 JavaScript 上》

JavaScript 引擎执行:

3、函数执行输出 a,b,c 三个值,bar 函数作用域里没有 a,b 的值,但有一个 c 的参数,此作用域查找结束,继续向上查找 a,b。

2、查找 bar 函数执行位置,去获取参数 c ,c 的参数是 b * 3 的值,在 foo 函数作用域中查找变量 b 。b 被定义过,它的值是 a * 2 , 在函数作用域查找 a ,a 是被传入的参数。此作用域查找结束。向上查找。

1、查找 foo 函数的执行位置,在外层 foo 函数传了一个值 2。

上面「执行过程」写的怪乱的,看图更容易理解。

JavaScript 的执行顺序是从上到下。

生命周期

局部变量在函数执行完毕后销毁,全局变量在页面关闭后销毁。


参考资料:

[1]https://github.com/mqyqingfeng/Blog/issues/3
[2]https://www.liaoxuefeng.com/wiki/1022910821149312/1023021187855808

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34468.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月15日 下午8:48
下一篇 2024年4月15日 下午8:50

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注