网上介绍js链式作用域的很多,但写的很烦杂,不好理解,现在根据网络文章整理一个简单易懂的,如下:
1.理解js的链式作用域的前提
1)首先要知道js的变量作用域,js的变量作用域就两种:全局和局部
2)js中当前作用域能过访问其上层作用域的变量和函数
2.js链式作用域的定义:
JS权威指南的描述:
JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。
这句话很难理解,但是换做简单的描述,JS的链式作用域就是:
JS中当遇到对变量名或者函数名的使用时,会首先在当前作用域查找变量或者函数,如果没有找到,就会到其上层作用域中寻找,并以此类推。
下面这个例子在很多博文中引用:
var x = 10;
function test() {
alert(x);
}
test();
上面例子中弹出的值是什么? 答案是10,这个很好理解,因为上面提到:
2)js中上层对象中的变量和函数对其子对象都是可见的
下面对这个例子稍微变换下:
var x = 10;
function test() {
alert(x);
var x = 2;
}
test();
改变后的例子弹出的值是什么?答案是undefined,如果用java等其他编程语言的思维分析很理解,但利用JS链式作用域来理解,函数test在执行时,会先在其本身的作用域中寻找,而函数本中是定义了x的,就不会在向上层寻找,但是是定义在alert之后,因此alert会弹出undefined,如果函数内没有定义x,就像最初的例子,那么就会在其上层作用域寻找,就是10
分享到:
相关推荐
其实对于Javascript链式作用域的描述,包括,JS权威指南,都有些太冗长了–但是很准确:JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。 这句话有点难懂,但程序的设计,基本都是为了...
作用域链决定了一个作用域如何查找变量,它是由当前执行环境与所有包含它的父级环境构成的链式结构。这个链对于理解函数调用和执行上下文至关重要。 此外,箭头函数(`=>`)在处理作用域方面有别于传统的函数表达式...
作用域链是由当前执行上下文的活动对象和所有父级作用域的变量对象组成的链式结构。全局作用域始终位于作用域链的末端,而函数内部的变量总是先于全局变量被查找。 总结来说,了解JavaScript的作用域和作用域链对于...
作用域链是由当前执行环境的变量对象和所有包含它的父级执行环境的变量对象组成的链式结构。如果在当前作用域找不到变量,就会向上级作用域查找,直至找到全局作用域。如果在全局作用域仍找不到,变量的值将被视为`...
作用域链由当前执行环境的变量对象和其父级执行环境的变量对象组成,形成一个链式结构。当查找变量时,JavaScript会从当前执行环境的变量对象开始,如果找不到,就会沿着作用域链向上查找,直到找到全局变量对象。 ...
当一个函数被创建时,它会形成一个作用域,而这个作用域会链接到其外部作用域,形成了一个链式结构,这就是作用域链。 作用域链的核心作用是在查找变量时确定其所在的位置。当在当前作用域找不到某个变量时,...
作用域链是由作用域构成的链式结构,它决定了变量的查找顺序和访问权限。每个函数在创建时都会与一个作用域链关联,这个链是根据函数的嵌套关系形成的。 1. **作用域链的构成** 当一个函数被创建时,它会获取一个...
作用域链的作用是让JavaScript引擎在当前作用域找不到变量时,能够按照链式搜索变量。例如,当一个函数需要访问变量时,JavaScript引擎会首先在当前作用域中查找,如果找不到则移至外层作用域继续查找,直至找到全局...
- **访问规则**:内部作用域可以访问外部作用域的变量,而外部作用域不能访问内部作用域的变量,遵循链式查找原则。 - **变量提升**:在同一个作用域内,变量和函数的声明会被提升到作用域的顶部。`var`声明的变量会...
这就是“作用域链”的链式查找机制。 作用域链的形成原理可以通过执行环境(ExecutionContexts)来解释。执行环境是代码执行时的一个抽象概念,它可以是全局代码、函数代码或eval代码。每个执行环境都与一个变量...
JavaScript是Web开发中的核心语言,其重要特性包括同步与异步处理、作用域与闭包、以及原型和原型链。这些概念是理解JS高级特性的基石。 **同步与异步的区别** 在JavaScript中,同步执行意味着代码按照顺序依次运行...
1. **`this`的作用域链**:这是最常见的方式,通常在原型链上实现。例如jQuery库,它在每个方法内部都返回`this`,以便继续调用其他方法。例如: ```javascript var Person = function() {}; Person.prototype....
在 JavaScript 中,变量的作用域链是从当前作用域开始,向上查找变量定义的链式结构。如果在当前作用域找不到变量,就会继续在父级作用域中查找,直到找到全局作用域。如果在全局作用域中还找不到,就会抛出引用错误...
在JavaScript编程语言中,原型(Prototype)、作用域(Scope)和闭包(Closure)是三个核心概念,对于理解和编写高效、可维护的代码至关重要。本文将深入探讨这三个概念,并通过实例解析它们的工作原理。 首先,...
链模式 链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴... this的作用域链,jQuery的实现方式,通常链式调用都是采用这种方式。 返回对象本身, 同this的区别就是显示返回链式对象。 闭包返回对象
在本文中,我们将探讨JavaScript的基础知识,特别是构造函数、作用域、变量作用域和预解析的概念。 首先,构造函数在JavaScript中是一种特殊的函数,常用于创建自定义类型。遵循的约定是,构造函数的首字母通常大写...
`f3`函数被定义在`f2`函数内部,因此`f3`可以访问到`f2`的局部变量`n`,这就是所谓的"链式作用域"。在链式作用域中,子函数可以访问父函数的所有变量,但子函数的变量对父函数来说是不可见的。当`f2`返回`f3`时,`f3...
此外,JavaScript采用的是链式作用域结构。这意味着函数可以访问其上层作用域中的变量,但上层作用域不能访问下层作用域中的变量。利用这一点,可以通过嵌套函数来访问外部函数的局部变量,因为内部函数可以访问外部...
- 作用域:JavaScript有全局作用域和局部作用域,以及ES6引入的块级作用域。理解作用域对于避免变量冲突和提升代码质量有很大帮助。 - 闭包:闭包是一种特殊的作用域现象,可以访问并操作外部函数的变量,常用于...