本文实例分析了JavaScript函数作用域链。分享给大家供大家参考。具体分析如下:
作用域链:
JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了作用域链,如下图所示:
作用域链就是从里到外的AO链
变量的寻找:
函数fn3中使用的变量,如在fn3作用域内寻找不到,则往外层fn2作用域寻找,以此类推,直到全局对象window
代码演示如下:
var c = 5; function t1(){ var d = 6; function t2(){ var e = 7; var d = 3; //如果在这里声明的var d = 3, //那么函数就不在向外寻找变量d,输出的值为15 console.log(c+d+e); } t2(); } t1();
了解了JavaScript作用域链后,在函数里面使用频率较高的外部变量,最好先将外部变量保存为局部变量后,再进行操作,这样就大大减少通过作用域链查找变量的时间。
作用域个数 = n(定义的函数个数) + 1(全局作用域) JavaScript函数高级——作用域与作用域链 一、作用域 (1)理解 就是一块"地盘", 一个代码段所在的区域。 它是静态的(相对于上下文对象), 在编写代码时就确定了。 (2)分类 全局作用域 函数作用域 ES6中新增了块级作用域 (3)作用 隔离变量,不同作用域下同名变量不会有冲突。 二、作用域与执行上下文 (1)区别1 全局作用
本文向大家介绍JavaScript作用域链示例分享,包括了JavaScript作用域链示例分享的使用技巧和注意事项,需要的朋友参考一下 JavaScript只有函数作用域;每个函数都有个作用域链直达window对象。 变量的查找由内而外层层查找,找到即止。 同时不仅可以查找使用,甚至可以改变外部变量。
本文向大家介绍javascript的函数作用域,包括了javascript的函数作用域的使用技巧和注意事项,需要的朋友参考一下 在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域。取而代之的javascript使用的是函数作用域(function sco
本文向大家介绍JavaScript 作用域链解析,包括了JavaScript 作用域链解析的使用技巧和注意事项,需要的朋友参考一下 JavaScript中有Scope(作用域),Scope chain(作用域链),Execute context(执行上下文),Active Object (活动对象),Dynamic Scope(动态作用域),Closure(闭包)这些概念,要理解这些概念,我们从静
本文向大家介绍JavaScript闭包与作用域链实例分析,包括了JavaScript闭包与作用域链实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript闭包与作用域链。分享给大家供大家参考,具体如下: 闭包定义 闭包指的是有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数A内部创建另一个函数B,那么函数B就是一个闭包,可以访问函数A作用域中的所
本文向大家介绍JavaScript进阶(二)词法作用域与作用域链实例分析,包括了JavaScript进阶(二)词法作用域与作用域链实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript词法作用域与作用域链。分享给大家供大家参考,具体如下: 一、作用域 域表示的就是范围,即作用域,就是一个名字在什么地方可以使用,什么时候不能使用。想了解更多关于作用域的问题推荐阅读《你不
本文向大家介绍图解javascript作用域链,包括了图解javascript作用域链的使用技巧和注意事项,需要的朋友参考一下 先来一段简单的javascript代码: 这段代码中的执行环境已经数清楚了,可是执行环境只是代码在预编译过程中javascript引擎所做的事情,当代码在window onload事件被触发,且sub函数被执行的时候会发生什么事情呢? 1.javascript引擎会在页面
问题内容: 我刚刚读了Ben Cherry撰写的有关JavaScript范围和提升,他提供了以下示例: 使用上面的代码,浏览器将警告“ 1”。 我仍然不确定为什么它返回“ 1”。他说的一些事情让人想到:所有函数声明都被提升到顶部。您可以使用函数来限定变量的范围。仍然没有点击我。 问题答案: 功能提升意味着将功能移到其作用域的顶部。那是, 交涉者将对此进行重写 奇怪吗? 另外,在这种情况下, 表现与