js中级-作用域链

作用域:浏览器给js的一个生存环境(栈内存)。

作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中。然后js从上到下逐行执行,遇到变量就去内存地址查找是否存在这个变量。有就使用,没有就继续向父级作用域查找直到window下结束,这种查找机制叫作用域链。

Js代码中存在着大量的变量和函数,我们在使用它们的时候一定要知道它们到底归属谁。

原文地址:https://www.cnblogs.com/wsxxy/p/10054775.html

时间: 2024-10-30 16:21:15

js中级-作用域链的相关文章

JS 之作用域链和闭包

1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(name); } Main(); </script>执行结果:{}即块级作用域. alex 2.JS采用函数作为作用域链 <script> function Main(){ var innerValue = "alex"; } Main(); console.log(in

js中作用域链的问题

为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是js中的作用域链 <script> var i = 10; function f1() { //第一层 i = 20; function f2() { //第二层 i = 30; function f3() { //第

js改变作用域链

js有两种作用域:全局和局部 在最外层定义的变量拥有全局作用域,对任何内部函数来说,都是可以访问的:而局部作用域则只有内部函数定义的变量才拥有:在函数内部定义变量时,要使用var,否则定义的变量时全局变量 js是没有块级作用域的,因此for循环中的i在执行完循环后,还可以被同作用域的代码获取.js的作用域都是相对于函数而言,是函数作用域. js的作用域链: 每个函数执行都会生成一个执行环境,全局执行环境是最外围的执行环境且被认为是window对象,因此所有全局变量和函数都会作为window对象的

JS的作用域链与原型链

来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链.每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域.作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this.arguments.命名参数和该函数中的所有局部变量

JS的作用域链

一 作用域链可以被看作一种路径, 沿着这条路径可以确定变量的值.. 二 作用域链的特点 (1) var关键字决定了哪个函数是变量的作用域链的终点;(2) 当引用一个变量时, JS会沿着由对象执行路径构成的作用域链进行解析, 查找变量最近定义的值, 一旦找到, 即使用该值.. 三 作用域链的图例 四 作用域链实例 (1) function example() {var age = 23;}var age = 25;example();alert(age); // 将输出25 说明: 当执行exam

JS高级——作用域链

基本概念 1.只要是函数就可以创造作用域 2.函数中又可以再创建函数 3.函数内部的作用域可以访问函数外部的作用域 4.如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链 <script> //f1--->全局 function f1() { //f2--->f1--->全局 function f2() { //f3---->f2--->f1--->全局 function f3() { } //f4--->f2--->f1----&

浅谈JS的作用域链(三)

前面两篇文章介绍了JavaScript执行上下文中两个重要属性:VO/AO和scope chain.本文就来看看执行上下文中的this. 首先看看下面两个对this的概括: this是执行上下文(Execution Context)的一个重要属性,是一个与执行上下文相关的特殊对象.因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象). this不是变量对象(Variable Object)的一个属性,所以跟变量不同,this从不会参与到标识符解析过程.也就是说,在代

js 延长作用域链

function buildUrl() { var qs = "?debug=true"; with (location) { var url = href + qs; } return url; } console.log(buildUrl()) 在此,with 语句接收的是 location 对象,因此其变量对象中就包含了 location 对象的所有属 性和方法,而这个变量对象被添加到了作用域链的前端.buildUrl()函数中定义了一个变量 qs.当在 with 语句中引用变量

第十八篇 js高级知识---作用域链

一直有想法去写写js方面的东西,我个人是最喜欢js这门语言,喜欢的他的自由和强大,虽然作为脚本语言有很多限制的地方,但也不失为一个好的语言,尤其是在H5出现之后.下面开始说说js的方面的东西,由于自己的能力有现,有点地方说的不明白,还请高手指点.这个文章,如果有时间的话应该会写一个系列,包括js的高级方面的知识,最终希望能够说到js的引擎方面的东西.千里之行,始于足下,下面开始说说最简单的一个东西—js的作用域链,时常也比较容易弄错,也算是自己做一个纪录. 首先看一段代码: function t