javascript作用域链学习笔记】的更多相关文章

作用域是javascript老生常谈的问题,在面试题中也经常出现.此文记录本人对js作用域的理解.从以下三个方面深入探讨js作用域和js作用域链. 1.什么是作用域? 2.什么是作用域链? 3.常见面试题. 一.什么是作用域? 熟悉编程的人都接触过作用域,比如全局变量和局部变量之分.作用域是变量和函数可以访问的范围,即作用域控制着变量和函数的可见性和生命周期. var name = "Aralic"; function person () { //局部变量 var age = &quo…
作用域链 "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里." --权威指南 在JavaScript中,一切皆对象,包括函数.函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性.其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问. 在一个函数被定义的时候, 会将它定义时刻的s…
javascript是基于原型的一门脚本语言,那究竟原型是什么? 本文将从以下几个方面重点阐述原型 构造函数是什么? 构造函数和我们常见的Array String有什么关系? 原型的使用? __proto__是什么? constructor是什么? 什么是原形链? 一:请看下面一段代码 //声明一个构造函数 函数名首字母一般大写 function Fn() { } Fn.prototype.a = function() { alert(1); } //得到实例化对象 var f1 = new F…
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学习笔记 JavaScript是一门高级.动态.解释型变成语言,非常适合面向对象和函数式编程风格. JavaScript的变量是无类型的. JavaScript和Java除了表面语法大致相似,它与Java是完全不同的两门变成语言. Hello World Node:交互式模式输出Hello World…
GNU工具链学习笔记 1..so为动态链接库,.a为静态连接库.他们在Linux下按照ELF格式存储.ELF有四种文件类型.可重定位文件(Relocatable file,*.o,*.a),包含代码和数据,可用来连接成可执行文件或共享目标文件;可执行文件(Executable File),ELF可执行文件:共享目标文件(Shared Object File,*.so),包含代码和数据:核心转储文件(Core Dump File),进程意外终止时,系统将该进程的地址空间内容和其他信息保存到该文件中…
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScript 4.2概述 AJS 4.2,即ArcGIS API for JavaScript 4.2,是美国ESRI公司针对WebGIS市场推出的.利用JavaScript和Dojo开发的一款产品,它在2016年12月发布.而AJS 4.0 beta则在一年前就发布了. 关于AJS3和AJS4选择的问题…
前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介绍,希望能帮助大家更好的理解. 变量作用域 在js中,变量分为全局变量和局部变量.全局变量的作用域是全局的,在任意地方都是被定义的.而局部变量可以是函数的参数.函数内定义以及{}内(ES6语法)定义,如果局部变量与全局变量重名的话,会优先取局部变量.下面我们来看看例子: 引用全局变量例子: var…
<script type="text/javascript"> /** * 作用域链: */ var a = "a"; function hao947(){ var b = "b"; alert(a);// output a alert(b);// output b // alert(c);// output undefind function hao(){ var c = "c"; alert(a);// out…
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的脉络: 设计与模式 5 大设计原则 7 种常见的设计模式 一句话解释含义 列举生活中的场景 . 业务代码场景 js 代码演示 设计与模式 之前一直以为「设计模式」是一个完整的名词 其实「设计」和「模式」是要分开来说的 「设计」:5 个常见的设计原则 「模式」:代码中常见的"套路",被程序员…
昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声明的变量.函数 而在ES3中对变量相关的信息都保存在变量对象上: 从功能上来说变量对象可以看作是词法环境中的环境记录 两者从功能上来说区别不大,只是不同版本的ES有不同的说法 为了保持与前文的一致,这篇文章中我还是用环境记录来描述JS保存当前执行环境(上下文)中定义的变量和函数的对象 ES6之前JS…
传递参数 function setName(obj){ obj.name="Nicholas"; obj=new object(); obj.name="Greg"; } var person=new Object(); setName(person); alert(person.name); //"Nicholas" 在函数体内重新new一个Object,并将它赋值为"Greg",但在函数外部访问name属性时,其值仍为&q…
1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,两个变量可以参与任何操作而不会相互影响. 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中.不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象.复制操作结束…
(本文是这些知识点的自我理解.写之余从头回顾,加深理解.取得更多收获之用.) 作用域(scope) 程序设计概念,通常来说,一段程序代码中所用到的名字(JS叫标识符(如变量名.函数名.属性名.参数..))并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域. 百度来的概念解释.我把JS的作用域理解为--标识符的可用性的范围. 作用域一般分全局作用域.函数作用域.let/const块级作用域. 先来看看全局作用域.代码演示: <script> var name = 'xm'…
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScript构造函数调用的语法是允许省略实参列表和圆括号的. 如: var o=new Object(); //->等价于 var o=new Object;   第四种:使用call()与apply()间接调用(放在后面详细说明)   2.函数的实参与形参——可选形参 先看一个例子: function g…
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()".   2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一…
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法分析:将词法单元流转换成抽象语法树(AST) 代码生成:将抽象语法树转换成可执行代码 3. LHS查询: 变量出现在赋值操作左侧, RHS查询: 变量出现在赋值操作右侧 4. 作用域嵌套:在当前作用域中无法找到某个变量的时候,引擎就会在外层的嵌套作用域中继续查找,直到找到该变量,或抵达最外层的作用域…
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 作用域.作用域链.执行环境.执行环境栈以及this的概念在javascript中非常重要,本人经常弄混淆,这里梳理一下: 局部作用域函数内部的区域,全局作用域就是window: 作用域链取决于函数被声明时的位置,解析标识符的时候就先找当前作用域,再向外查找,直到全局,这样一个顺序:和函数在哪里调用无关: 执行环境就是函数可访问的数据和变量的集合,也就是函数的作用域链上的所有数据和变量: 执行环境栈就是根…
1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添加到作用域链的头部,然后执行内部statement,最后把作用域链回复到原始状态.   但是:with语句要尽量避免使用.有with代码的语句难以优化,且运行的更慢. 在对象嵌套跟多层次的时候通常会使用with来优化. 如: document.forms[0].address.value //->…
第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变量---是一个值的名称,通过这个名称来获得对值的引用. 数据类型 JS中分为两大类,基本数据类型,对象数据类型. 其中基本数据类型包括:数值,字符串,布尔,undefined,null,symbol 对象数据类型:无序对象,有序对象(数组),函数,Date,RegExp,Error 基本数据类型--…
之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时候发现作用域和执行环境确实很重要,又很基础,对理解JavaScript闭包很有帮助,所以在写一篇对作用域和执行环境的理解. 作用域 作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域. 单纯的JavaScript作用域还…
闭包引入的前提个人理解是为从外部读取局部变量,正常情况下,这是办不到的.简单的闭包举例如下: function f1(){ n=100; function f2(){ alert(n); } return f2; } var result=f1(); result(); 代码中的f2函数,就是闭包. function f1(){ var n=100; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=…
关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之间会读取函数声明,意思是在执行代码之前会先读取函数声明.这就意味着可以把函数声明放在调用它的语句 后面. sayHi(); function sayHi(){ alert("Hi!"); } 理解函数提升的关键,就是理解函数声明与函数表达式之间的区别. //不要这样做 if(condition){ function sayHi(){ alert("HI!"); } }else{ function sa…
闭包和作用域链是JavaScript中比较重要的概念,首先,看看几段简单的代码. 代码1: var name = "stephenchan"; var age = 23; function myFunc() { alert(name); var name = "endlesscode"; alert(name); alert(age); alert(weight); } myFunc(); myFunc(); 上述代码1中,两次调用myFunc()的输出是一致的.可…
我之前用过闭包,用过this,虽然很多时候知道是这么一回事,但是确实理解上还不够深入.再一次看javascript高级程序设计这本书时,发现一起很多疑难问题竟然都懂了,所以总结一下一些理解,难免有错,所以希望有大神可以指出或者补充. 一开始都是从作用域链开始的,要理解作用域链,首先要先说几个名词,一开始把我搞晕的几个名词.执行环境(execution context),变量对象(variable object),作用域链(scope chain). 执行环境,里面有是运行时的环境,包括了当前作用…
还是之前那一段简单的javascript代码: window.onload=function(){ function sub(a,b){ return a-b; } var result=sub(10,5); } 这段代码中的执行环境已经数清楚了,可是执行环境只是代码在预编译过程中javascript引擎所做的事情,当代码在window onload事件被触发,且sub函数被执行的时候会发生什么事情呢? 1.javascript引擎会在页面加载脚本被执行时为每个函数创建一个作用域(执行上下文)及…
JavaScript的作用域链还是很有味道的,搞懂了这个知识点,闭包的问题也就迎刃而解咯 1.JavaScript的全局变量和局部变量 首先,先来看看js的全局变量和局部变量,js不是块级作用域,所以不能把你学过的C/C++作用域的知识用在js中! (1)全局变量 js的全局变量也可以看做window对象的属性,这句话怎么理解,请看以下代码: var x = 10; alert(window.x);//弹出10 也就是说var x = 10;等价于window.x=10; 再来看一段代码 fun…
最近想整理一下js执行代码的一些知识,如果有出错的地方还请指正. 执行环境(Execution Context) 所有的javascript代码都是在一个执行环境中被执行的.它只是一种机制,用来完成运行时作用域.生存期等方面的处理. 代码分为三种类型: Global Code Eval Code Function Code 这是一个EC结构 可以理解如下: activeExecutionContext = { VO: {...}, // or AO this: thisValue, Scope:…
ArcGIS API for JavaScript 4.2直接从官网的Sample中学习,API Reference也是从官网翻译理解过来,鉴于网上截稿前还没有人发布过4.2的学习笔记,我就试试吧. 什么是ArcGIS API for JS?这里就不多介绍了,最关键的一点是4.x版本与3.x版本的变化,按官方的意思是重新写了底层. 笔记中规定: ArcGIS API for JavaScript简称AJS 使用CDN(即不配置本地环境)进行测试开发 其余根据需要进行修改.增删. 要将地图显示在h…
作用域链 基本概念: 在了解作用域链和内存之前,我们先了解两个概念,分别是执行环境和变量对象. 执行环境:定义变量或者函数有权访问的其他数据,决定了它们各自的行为.每个对象都有自己的执行环境. 变量对象:包含执行环境中所有变量和函数都保存在这个对象中,每个执行环境都有一个与之关联的变量对象.但是我们无法访问. 作用域链: 在我们了解这两个概念之后,我们来了解一下作用域链. 作用域链主要是保证对执行环境有权访问的所有变量和函数的有序访问.作用域的前端,始终都是当前执行的代码所在环境的变量对象.作用…
面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直接访问它们.ECMAScript中有两种属性:数据属性和访问器属性.1)数据属性数据属性包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个描述其行为的特征.1.[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访…