美文网首页
12.JavaScript作用域&作用域链

12.JavaScript作用域&作用域链

作者: 讲武德的年轻人 | 来源:发表于2019-08-09 16:21 被阅读0次

JS中只有函数级别的作用域,没有块级别的作用域;换句话说,只有在进入或者退出函数的时候,作用域会发生变化。

函数的作用域:外部对内部可见;内部对外部不可见;内部优先;

一. 外部对内部可见

且看以下代码,浏览器会输出什么呢?

var scope = 'g';
function t(){
    console.log(scope);
    var scope = 'l';
    console.log(scope);
}
t();

结合预编译的知识可以知道,浏览器依次输出“undefined”、“l”,前面输出undefined主要是因为在函数内部对scope这个变量有定义,但是若函数里面不存在这条定义,会怎么输出呢?

var scope = 'g';
function t(){
    console.log(scope);
    console.log(scope);
}
t();

这样的话,输出都为“g”

二. 内部对外部不可见

且看以下代码,浏览器会报错:

function t(){
    var scope = 'l';
}
t();
console.log(scope)
三. 都可见时,内部优先
var scope = 'g';
function t(){
    console.log(scope);
    var scope = 'l';
    console.log(scope);
}
t();

该段代码与第一段重复,但同样可以说明问题。

执行环境(execution context),定义了执行期间可以访问的变量和函数。

  1. 全局执行环境
  • Global Object(window)
  • 从见到JS代码开始创建
  • 到网页关闭时销毁
  1. 函数执行环境
  • Activation Object
  • 从函数调用开始创建
  • 到函数调用结束时销毁

作用域链

  • 作用域[[scope]]和作用域链,每个函数都有。
  • 作用域是私有属性,只能由JS引擎访问
  • 作用域链,是AO和GO构成的链
  • 所谓执行环境,就是根据作用域链依次查找变量和函数:找到即停,全部找完无果,报错。

相关文章

  • 12.JavaScript作用域&作用域链

    JS中只有函数级别的作用域,没有块级别的作用域;换句话说,只有在进入或者退出函数的时候,作用域会发生变化。 函数的...

  • 作用域链和闭包

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

  • web性能实践

    一. 作用域 前面我们了解作用域概念的以及作用域链是如何运作的。 随着作用域链中的作用域数量的增加,访问当前作用域...

  • 作用域链

    作用域链 把多个作用域串起来便形成了作用域链;每个函数在初始化完成之后就拥有了各自的作用域链,但此时的作用域链中并...

  • 作用域/作用域链 闭包及其使用

    一、作用域、作用域链 作用域(scope) 浅显的理解: 作用域就是变量的可用范围(scope) 为什么要有作用域...

  • JS 作用域

    作用域 作用域:限制某个变量在某个区域内有效 作用域分为 全局作用域 和 局部作用域 作用域链 从里到外依次执行 ...

  • 作用域和作用链

    关键词:作用域作用链 作用域 js中没有块级作用域 全局作用域,函数作用域太简单,就不演示(≧▽≦)/啦啦啦 作用...

  • 2018-12-18

    JS高级 作用域&作用域链 作用域: 1.作用域的个数:n(函数声明的个数)+1(全局作用域)2.作用域不会存储变...

  • 作用域和闭包

    作用域链 (据我所知)所有的编程语言都存在作用域链。整个代码存在全局作用域、函数作用以及块级作用域。 上述代码将会...

  • 彻底搞懂JS作用域和作用域链

    作用域和作用域链 作用域:决定了代码区块中变量和其他资源的可见性; ·全局作用域和函数作用域 作用域是分层的内部可...

网友评论

      本文标题:12.JavaScript作用域&作用域链

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