We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于作用域,在前面介绍执行上下文的时候提及到,执行上下文中有个外部引用,各个执行上下文的外部引用全都链接起来就形成作用域链。
外部引用
JavaScript使用静态作用域,那与之相对应的动态作用域的区别是什么?
简单来段代码:
var value = 1; function foo() { console.log(value); } function bar() { var value = 2; foo(); } bar(); // ???结果是
分析一下执行过程:
执行foo函数,遇到console.log(value),开始查找foo内部有无value变量定义,没有的话,往上级查找。结果为1。
console.log(value)
value
再回忆之前介绍执行上下文,执行上下文的词法环境包括了两点:
词法环境的确立是在创建执行上下文阶段,而不是在执行阶段,而对外部环境的引用链接就是作用域链,从而论证了JavaScript的作用域是静态作用域。
我们由一个思考题慢慢引出闭包:
Q1 var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f(); } checkscope();
Q2 var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f; } checkscope()();
先来看看Q1,执行过程为:
checkscope
而Q2的执行过程呢:
checkscope()
The text was updated successfully, but these errors were encountered:
No branches or pull requests
作用域
关于作用域,在前面介绍执行上下文的时候提及到,执行上下文中有个
外部引用
,各个执行上下文的外部引用全都链接起来就形成作用域链。静态作用域
JavaScript使用静态作用域,那与之相对应的动态作用域的区别是什么?
简单来段代码:
分析一下执行过程:
执行foo函数,遇到
console.log(value)
,开始查找foo内部有无value
变量定义,没有的话,往上级查找。结果为1。再回忆之前介绍执行上下文,执行上下文的词法环境包括了两点:
词法环境的确立是在创建执行上下文阶段,而不是在执行阶段,而对外部环境的引用链接就是作用域链,从而论证了JavaScript的作用域是静态作用域。
我们由一个思考题慢慢引出闭包:
先来看看Q1,执行过程为:
checkscope
函数,进入checkscope内部,返回值为f函数的返回值。而Q2的执行过程呢:
checkscope()
函数,没有checkscope()函数,猜测checkscope函数内部返回一个函数。The text was updated successfully, but these errors were encountered: