2018-11-20

作用域链的理解

概念:

       1:每执行某个函数,即进入新的作用域。
       2:使用变量或给变量赋值,变量应从自身的作用域下找,如找不到,则往上层作用域找。

例子:

var a= 1
function fn1() {
function fn2() {
console.log(a)
}
function fn3() {
var a =4
fn2()
}
var a =2
return fn3
}
求 var fn = fn1()
fn() 输出多少?
fn1 函数中声明了2个函数(fn2和fn3),同时声明了变量a=2,并return fn3函数;
fn=fn1,即fn=fn3,fn()即fn3();
fn3函数调用fn2函数;
fn2函数中没有变量a,便去fn1函数中寻找,var a = 2,所以fn()输出2。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,378评论 2 17
  • 转自:https://fed.renren.com/2017/05/21/webassembly/ Webasse...
    core1988阅读 7,683评论 0 1
  • 1.函数声明和函数表达式有什么区别 (*) 区别: 函数声明后面的分号可加可不加,不加也不影响接下来语句的执行,但...
    Sheldon_Yee阅读 3,068评论 0 1
  • 函数声明和函数表达式有什么区别 (*)解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;函数表达式则必须...
    coolheadedY阅读 2,972评论 0 1
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,360评论 1 10