美文网首页饥人谷技术博客
JavaScript运行机制:作用域与作用域链

JavaScript运行机制:作用域与作用域链

作者: 枸杞辣条 | 来源:发表于2017-02-17 00:06 被阅读24次

本文归饥人谷和本人所有,如需转载请注明来源

1.作用域

  1. 作用域声明提前:1 带var的和函数不管位置在哪里,在作用域中都会被提到最前面进行解析,把变量赋值为undefind。变量>函数是解析顺序,把变量赋值undefined,把函数解析成字符串,等号右边的值要等到JS的线程执行到。2 等号右边是在运行的时候才能解析得到
  2. 作用域链:1 作用域访问未在自身内部定义的变量或者函数,会一层一层往父级以上的作用域找,换句话说只能由内而外。2 作用域链的定义与函数自身在哪里运行无关,和函数自身解析的位置才相关。

首先,JS是单线程任务语言,也就是说,JS是从上到下依次解析的。
其次函数才生成作用域,if或者for还有JSON里面的{}不能生成作用域。

根据作用域规则

现在,先让我们看一个例子。

console.log(a);//undefined
console.log(fn);//function fn(){}
var a=0;
function fn (){  }

第二个例子:

console.log(a)
var a=1
function fn(){
    console.log(a)
    var a=10;
    function fn2(){
        a=20;
    }
   fn2();
   console.log(a)
}
fn()
console.log(a)

结果是: 第一个打出的是undefined。因为声明被提前。第二个是fn的console也是undefined理由同上。第三个:20,按照执行顺序来看。第四个是 1,因为fn并没有引用外部变量。这里最主要的是变量声明的提前

让我们再看一下以下的问题。

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

根据等号后执行,输出的结果是undefinded,function(){console.log(1)}

根据作用域链让我们再看几个例子。

var a=0;
function fn1(){
     a=10;
     function fn2(){
        console.log(a);
         var b=2; 
   }
   fn2();
   console.log(b)
}
fn1();
console.log(a)

输出依次是:fn2:10,fn1:报错,全局的conosle:10

解析:首先执行fn2,fn2函数往fn1这个父级函数找到a,所以a=10;第二个console,fn1找不到这个变量,就往全局中寻找,全局也找不到就直接报错了。第三个console,经过fn1的折腾,此时全局的a已经变成10。

相关文章

  • 前端问(面试)题

    dom执行顺序 事件委托原理 原型链的作用,与作用域链的区别 js事件轮询原理、JavaScript的运行机制 结...

  • javascript基础知识问答-作用域和闭包

    1.理解词法作用域和动态作用域2.理解JavaScript的作用域和作用域链3.理解JavaScript的执行上下...

  • 2018-04-11

    JavaScript作用域链浅析 1、作用域 作用域指的是变量存在的范围。在ES5规范中,JavaScript只有...

  • 作用域和闭包

    一、理解 JavaScript 的作用域、作用域链和内部原理 作用域 javascript 拥有一套设计良好的规则...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • JavaScript运行机制:作用域与作用域链

    本文归饥人谷和本人所有,如需转载请注明来源 1.作用域 作用域声明提前:1 带var的和函数不管位置在哪里,在作用...

  • JavaScript 作用域和作用域链

    JavaScript 作用域 作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域...

  • JS_0: 执行环境和作用域链

    JavaScript,目前对于执行环境和作用域链的理解 什么是作用域链? 要讲作用域链就得先讲执行环境。 每个函数...

  • 作用域链和闭包

    在谈作用域链之前先说一下与作用域链关系紧密的执行环境和作用域。 作用域:作用域指的是变量的适用范围。 作用域链:作...

  • 作用域

    JavaScript以函数为作用域。 2 作用域在被调用之前,已经被创建了。 3 函数的作用域存在作用域链,也是在...

网友评论

    本文标题:JavaScript运行机制:作用域与作用域链

    本文链接:https://www.haomeiwen.com/subject/xqufvttx.html