资讯专栏INFORMATION COLUMN

Javascript中的作用域

AlphaWatch / 2905人阅读

摘要:作用域的概念所谓作用域,作用就是指读,写等操作,而域便是指空间,范围等中的域有是全局的域,相应地里面的变量就是全局变量,函数就是全局函数如果有多个包住的域的话,函数会自上而下执行,比如写了两的时候便会从上到下先执行第一个再执行第二个的代码比

作用 域的概念

所谓作用域,作用就是指读,写等操作,而域便是指空间,范围等

js中的域有
1.script
script是全局的域,相应地里面的变量就是全局变量,函数就是全局函数,如果有多个script包住的域的话,
函数会自上而下执行,比如写了两的时候便会从上到下先执行第一个script再执行第二个
script的代码

比如下面这个例子




//会报undefined的错,在每一个域中都会完成两步操作,预解析和逐行解读代码,在第一个域中,预解析完了之
//后仓库(比喻,后文会提到)里并没有a这个变量,所以执行alert的时候会报错





// 可以正常工作,因为在第一个预解析的过程中,变量a已经被存入了仓库中,在第二个script域里面并不会清空
//之前仓库里的变量
2.函数
函数内部也有一个域,域的执行方向为由里到外,比如在函数里面alert(a),如果在里面没有定义这个a的话,
那么它便会向外一级去寻找这个变量a,一层一层,直到找到为止,如果找不到就会报错

谈到这里,大家对上面最不明白的应该就是那个仓库了,下面来详细谈谈

首先要了解得应该是下面这个

浏览器中JS解析器的工作方式

js解析器并不会在一开始执行所有代码,而是会先进行一个预解析,预解析的时候只是根据一些关键字来找到一些东西放到“仓库”里面去,如果是var 变量,不会管变量是一个什么值,直接先给它赋一个值undefined,如果是一个函数function,会把整个代码块赋值给它(这个代码块并不会执行),而如果是一个参数的话,相当于var 参数(参考变量);

1. 预解析,“找一些东西,根据一些关键字,var function 参数”

   在找的过程中

所有的变量,在正式运行代码之前,都被赋了一个值,undefine

所有的函数,在正式运行之前,都是整个函数块

所有的参数,(a)相当于(var a;)

但是如果因为开发者的不留心,这些变量名和函数名互相之间冲突了,仓库里的东西会怎么样呢,

答案是遇到重名的,只留一个,函数和变量重名了,留函数,同一级别的重名了,留后面那一个
   
2. 逐行解读代码

当预解析完成之后,便相当于开始正式工作了,之前的相当于热身

解读代码的过程中,表达式是可以改变“仓库”里的值的,而函数调用也就是相当于在函数里面那个域里面再执行预解析和逐行解读代码的操作

表达式 = + - * / % ++ -- ! Number()...... 表达式可以去改预解析中的值

函数调用
   1.预解析
   2.逐行解读代码

有时间放几个小例子来帮助更好的理解,先写到这吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80258.html

相关文章

  • 大话javascript 1期:作用作用

    摘要:全局作用域局部作用域局部作用域全局作用域局部作用域块语句没有块级作用域块级声明包括和,以及和循环,和函数不同,它们不会创建新的作用域。局部作用域只在该函数调用执行期间存在。 一、什么是作用域? 作用域是你的代码在运行时,各个变量、函数和对象的可访问性。(可产生作用的区域) 二、JavaScript中的作用域 在 JavaScript 中有两种作用域 全局作用域 局部作用域 当变量定...

    NicolasHe 评论0 收藏0
  • 还担心面试官问闭包?

    摘要:一言以蔽之,闭包,你就得掌握。当函数记住并访问所在的词法作用域,闭包就产生了。所以闭包才会得以实现。从技术上讲,这就是闭包。执行后,他的内部作用域并不会消失,函数依然保持有作用域的闭包。 网上总结闭包的文章已经烂大街了,不敢说笔者这篇文章多么多么xxx,只是个人理解总结。各位看官瞅瞅就好,大神还希望多多指正。此篇文章总结与《JavaScript忍者秘籍》 《你不知道的JavaScri...

    tinyq 评论0 收藏0
  • 十分钟快速了解《你不知道的 JavaScript》(上卷)

    摘要:最近刚刚看完了你不知道的上卷,对有了更进一步的了解。你不知道的上卷由两部分组成,第一部分是作用域和闭包,第二部分是和对象原型。附录词法这一章并没有说明机制,只是介绍了中的箭头函数引入的行为词法。第章混合对象类类理论类的机制类的继承混入。 最近刚刚看完了《你不知道的 JavaScript》上卷,对 JavaScript 有了更进一步的了解。 《你不知道的 JavaScript》上卷由两部...

    赵春朋 评论0 收藏0
  • 浅谈对JavaScript闭包的理解

    摘要:关于循环和闭包当循环和闭包结合在一起时,经常会产生让初学者觉得匪夷所思的问题。闭包是一把双刃剑是比较难以理解和掌握的部分,它十分强大,却也有很大的缺陷,如何使用它完全取决于你自己。 在谈闭包之前,我们首先要了解几个概念: 什么是函数表达式? 与函数声明有何不同? JavaScript查找标识符的机制 JavaScript的作用域是词法作用域 JavaScript的垃圾回收机制 先来...

    missonce 评论0 收藏0
  • JavaScript优化之管理作用

    摘要:当被创建时,它的作用域链初始化为当前运行函数的属性中的对象,这些值按照他们出现在函数中的顺序,被复制到执行环境的作用域链中。然后这个对象被推入作用域链最前端。 在计算机科学中,数据存储的位置关系到代码执行过程中数据的检索速度,有一个经典的问题即为:通过改变数据的存储位置来获得最佳的读写性能。 Javascript中四种基本的数据存储位置 字面量字面量只代表自身,不存储在特定的位置。...

    fox_soyoung 评论0 收藏0
  • 这一次,我们换种姿势学习 javascript

    摘要:操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。此外可以使用和来设置对象及其属性的不可变性级别。忽视这一点会导致许多问题。使用调用函数时会把新对象的属性关联到其他对象。 前言 《你不知道的 javascript》是一个前端学习必读的系列,让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途。本书介绍了该系列的两个主题:...

    zone 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<