在之前写的进阶系列里面,提到了执行上下文在创建阶段,要创建变量对象.确定作用域链还有确定this的指向,本次将重点讲解一下作用域链. JavaScript代码的执行过程 在讲解作用域链之前,首先了解一下,JavaScript代码的执行过程,包括两个步骤: 编译阶段 JavaScript引擎执行阶段 在编译阶段主要做的是,经过编译器的编译,将代码转化为可执行的代码,其中就包括了作用域规则的确定,而在之前说的执行上下文的创建和执行阶段是发生在JavaScript隐引擎执行阶段,所以作用域链是在执行上…
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123; { console.log( num ); } } console.log( num ); 上面这段代码在JavaScript中是不会报错的,但是在其他的编程语言中(C#.C.JAVA)会报错. 这是因为,在JavaScript中没有块级作用域,使用{}标记出来的代码块中声明的变量num,是可以…
首先,我说的比较是指JS中这种思想/实现方式与C++编译原理中思想/实现方式的比较 参考链接:(比较易懂的介绍,我主要写个人理解) 作用域链: http://www.cnblogs.com/dolphinX/p/3280876.html 闭包:http://kb.cnblogs.com/page/110782/ 个人理解: 作用域链: 在JS中,function也是一种object的实例. 作用域的概念必须已经知晓. 作用域链:用于标识符解析:确定数据的存储位置以及数据作用域(数据访问).(应该…
1.原型相当于Java.C++里面的父类,由封装公有属性及方法而产生,子类可以继承. 原型继承实现(函数的原型属性指向原型函数一个实例对象,函数的原型的构造函数指向函数本身) 1)eg:原型链 function Foo() { this.value = 42; } Foo.prototype = { method: function() {} }; function Bar() {} // 设置Bar的prototype属性为Foo的实例对象 Bar.prototype = new Foo();…
载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.Javascript没有代码块作用域的概念,局部作用域是针对函数来说的. function fun() { for( var i = 0 ; i < 10 ; i++) {} //如果在Java中i此时应当属于未声明的变量,但是Js中i的作用域依然存在 console.log(i);//10 if(t…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.Javascript没有代码块作用域的概念,局部作用域是针对函数来说的. function fun() { for( var i = 0 ; i < 10 ; i++) {} //如果在Java中i此时应当属于未声明的变量,但是Js中i的作用域依然存在 console.log(i);//10 if(…
The Scope Chain JavaScript is a lexically scoped language: the scope of a variable can be thought of as the set of source code lines for which the variable is defined. JS 是一个词法作用域语言,可以理解为变量的作用域就是变量所定义的源代码源代码范围处. Global variables are defined throughou…
本文已发布在西瓜君的个人博客,原文传送门 作用域 JS中有两种作用域:全局作用域|局部作用域 栗子1 console.log(name); //undefined var name = '波妞'; var like = '宗介' console.log(name); //波妞 function fun(){ console.log(name); //波妞 console.log(eat) //ReferenceError: eat is not defined (function(){ cons…
前言:JS 的作用域.执行上下文.this.闭包是老生常谈的话题,也是新手比较懵懂的知识点.当然即便你作为老手,也未必真的能理解透彻这些概念. 一.作用域和执行上下文 作用域: js中的作用域是词法作用域,即由 函数声明时 所在的位置决定的.词法作用域是指在编译阶段就产生的,一整套函数标识符的访问规则.(区别于词法作用域,动态作用域是在函数执行的时候确认的,js的没有动态作用域,但js的this很像动态作用域,后面会提到.词法作用域的概念十分重要,请多加记忆并理解.) 说到底js的作用域只是一个…
作用域与闭包 作用域 什么是作用域 作用域就是一套规则,它负责解决(1)将变量存在哪儿?(2)如何找到变量?的问题 作用域工作的前提 谁赋予了作用域的权利?--js引擎 传统编译语言编译的过程 分词/词法分析:字符串 => 词法单元 var a=2; => var a = 2 ;(共5个单元) 解析/语法分析:词法单元流 => 抽象语法树(Abstract syntax tree,AST) 代码的生成: AST => 可执行代码(机器指令) js引擎编译的特点: 代码在执行前进行编…
聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久,无论看别人如何解释,就是不通.不过理越辩越明,代码写的多了,小程序测试的多了,再回过头看看别人写的帖子,也就渐渐明白了闭包的含义了.咱不是啥大牛,所以不搞的那么专业了,唯一的想法就是试图让你明白什么是作用域,什么是闭包.如果看了这个帖子你还不明白,那么多写个把月代码回过头再看,相信你一定会有收获:…
JavaScript当然是会用的,不过没有深入系统的学习罢了.平常还是用JQuery比较多,原生的JS用到的很少. 不过前端时间学习Ruby,被动态语言的强大和魔幻给震惊了一把.了解Ruby后,我把目光转移到了这门很早就伴随我的语言.JQuery是一个华丽的外衣,一把好用的工具,但炫彩背后必有强大的后台,让我稍微掀起这幕布的一角吧. ###作用域链 闭包这个词想必大家不陌生,可谓是动态语言了不起的几把刷子之一了.在JS中,要想理解闭包,首先要拿作用域链这个概念下手. 先来看一下JS语言的另一种定…
关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ ------------------------------------------------------------------------------------------------------------------------------------------- 作用域 js中作用域只有一种,就是函…
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(四) js共有5种基本数据类型:Undefined.NULL.Boolean.Number.String.5种基本数据类型是按值访问的,因此可以操作保存在变量中的实际值.而引用类型则不同,因为引用类型的值是保存在内存对象中的,而js不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间.在操作对象的时候,是在操作对象的引用而不是实际的对象.所以有“引用类型的值是按引用访问的”说法. 基本…
Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空间 1.1 什么是命名空间 Namespace命名空间,也称名字空间,是从名字到对象的映射.Python中,大部分的命名空间都是由字典来实现的,但是本文的不会涉及命名空间的实现. 命名空间的一大作用是避免名字冲突: def fun1(): i = 1 def fun2(): i = 2 同一个模块中…
js执行环境.作用域 执行环境:是javascript中的一个重要的概念,<javascript高级程序设计第三版>的定义是:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为.执行环境其实就是一个概念,一种机制 执行环境作用:执行环境就是用来完成javascript运行时在作用域.生存期等方面的处理. 变量对象:每一个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境:最外围的一个执行环境,根据ECMAScript实现所在的宿主环境…
js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函数)():这里是匿名函数中的循环:而匿名函数的作用将所在函数(匿名函数做在的函数)的局部变量常驻内存 3.区别块级作用域(私有作用域:循环),局部变量(函数),全局变量:不是说js没有局部变量,局部变量是对函数而言,块级作用域是对循环(比如for循环)而言 二.js模仿块级作用域(js没有块级作用域…
全局作用域和局部作用域 全局作用域 局部作用域:函数作用域 全局作用域在全局和局部都可以访问到,局部作用域只能在局部被访问到 var name="cyy"; function fn(){ var age=25; console.log(name);//cyy console.log(age);//25 } fn(); console.log(name);//cyy console.log(age);//报错age is not defined js没有块级作用域,此处依然是全局变量 i…
作用域 ==> 作用域链   作用域:变量可以其作用的区域(声明定义好一个变量,变量可以在哪些范围内使用) 分类:全局作用域和局部作用域(函数作用域):在js中,目前全局有作用域以及函数可以形成作用域 注意点:函数作用域就是在函数声明定义好的时候,这个函数作用域就定下来了.   作用域链:任何函数形成作用域,函数嵌套在另外一个函数中,外层函数也有自己的作用域,这样从里到外,到全局作用域形成的链式结构叫做作用域链 function fn(){ var num = 10; function inne…
1. var output = 0; (function() { output++; }()); console.log(output); 函数对全局的output进行操作,因为JS没有块级作用域,所以output为1. 2. var output = 0; (function(output) { output++; }(output)); console.log(output); 函数传入output的值,但函数内只是对参数output做加一操作,没有对全局的output进行操作,所以outp…
1.js没有块级作用域 if (true) { var color = “blue”; } alert(color); //”blue” for (var i=0; i < 10; i++){ doSomething(i); } alert(i); 2,变量定义 全局变量 变量定义:var和没有var function add(num1, num2) { var sum = num1 + num2; return sum; } alert(sum); //causes an error sinc…
今天遇到了一个问题,抽象出来的代码如下: var zoom=13; function setZoom(){ zoom=14; } function displayZoom(){ this.setZoom(); alert(zoom); var zoom=1500; this.changeZoom(); alert(zoom); } function changeZoom(){ this.zoom=++zoom; } 执行结果 ……………………………………………… ………………………… ………………
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73   一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: i=100;//Number类型 i="variable";//String类型 i={x:4};//Object类型 i=[1,2,3];//Arra…
一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: i=100;//Number类型 i="variable";//String类型 i={x:4};//Object类型 i=[1,2,3];//Array类型 JS的这种特性虽然让我们的编码更加灵活,但也带来了一个弊端,不利于Debug,编译器的弱检测让我们维护冗长的代码时相当痛苦. 二…
//js私有作用域,js没有块级作用域 function Box(){ for(var i=0;i<5;i++){} console.log(i);//5,如果js有块级作用域,那么i在for循环外面就不可能取得到,那么如何将其私有化呢?如下: } Box(); function Mybox(){ (function(){//用一个自我执行的匿名函数将其包裹起来就可以实现变量的私有化 for(var i=0;i<5;i++){ console.log(i);//0 1 2 3 4 } //变量…
作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作用域. 静态作用域与动态作用域 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了. 而与词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的. 让我们认真看个例子就能明白之间的区别: var value = 1; function foo() {…
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> /* * 作用域 * - 作用域指一个变量的作用的范围 * - 在JS中一共有两种作用域: * 1.全局作用域 * - 直接编写在script标签中的JS代码,都在全局作用域 * -…
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(七) 直接切入主题~ 定义函数的方式有两种: 函数声明 function functionName(arg0,arg1,arg2) { //函数体 } 函数声明有一个重要的特征——函数声明提升,意思是在执行代码之前会先读取函数声明,允许把函数声明放在调用它的语句后面 sayHi(); function sayHi() { alert("hi"); } 函数表达式 var fu…
将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及面试题:call.apply 及 bind 函数内部实现是怎么样的? 首先从以下几点来考虑如何实现这几个函数 不传入第一个参数,那么上下文默认为 window 改变了 this 指向,让新的对象可以执行该函数,并能接受参数 那么我们先来实现 call Function.prototype.myCal…
对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的).可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量.只要函数运行完毕,本地变量就会被删除. 我们先来逐步理解: 只能在函数内部访问 function test() { var a = 0; return a; } console.log(a); //结果…