JS作用域链详解
本文实例为大家分享了JS作用域链的相关内容,供大家参考,具体内容如下
1、所有全局变量和函数都是作为window对象的属性和方法创建的。
2、在某个方法函数的作用域中,所有代码执行完之后,该作用域被销毁,保存在其中的所有变量和函数定义也会随着被”销毁“,这就是局部作用域。但闭包不会销毁局部变量。
这里的销毁:是指下次再执行此函数的时候,所有的变量又回到最初的状态
var color = "blue"; function changeColor(){ var anothercolor = "red"; if(color==="blue"){ color = anothercolor; } //这里可以访问anothercolor,color } //这里只可以访问color changeColor(); console.log(color);//red console.log(anothercolor); // undefined。anothercolor是函数changeColor的局部变量,在整个函数运行之后已经被“销毁”
3、变量的声明注意点
function ddq(){ alert(i) var i=11 alert(i) } ddq() // 第一个返回underfind //第二个返回11
这段代码相当于
function ddq(){ var i alert(i) i=11 alert(i) } ddq()
注意点:在一个函数内部的声明变量时(在调用之后),就相当于先申明,调用后赋值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
JavaScript 作用域链解析
JavaScript中有Scope(作用域),Scope chain(作用域链),Execute context(执行上下文),Active Object (活动对象),Dynamic Scope(动态作用域),Closure(闭包)这些概念,要理解这些概念,我们从静态和动态两个方面去分析一下. 首先我们写一个简单的function来做一个例子: 复制代码 代码如下: function add(num1, num2){ var sum = num1 + num2; return sum; } 我
-
js 函数的执行环境和作用域链的深入解析
第一步. 定义后:每个已定义函数,都有一个内在属性[scope],其对应一个对象的列表,列表中的对象仅能内部访问. 例如:建立一个全局函数A,那么A的[Scope]内部属性中只包含一个全局对象(Global Object),而如果我们在A中创建一个新的函数B,那么B的[Scope]属性中就包含两个对象,函数A的Activation Object对象在前面,全局对象(Global Object)排在后面. 简而言之,一个函数的[Scope]属性中对象列表的顺序是上一层函数的Activation O
-
javascript从作用域链谈闭包
神马是闭包 关于闭包的概念,是婆说婆有理. 闭包是指有权访问另外一个函数作用域中的变量的函数 这概念有点绕,拆分一下.从概念上说,闭包有两个特点: 1.函数 2.能访问另外一个函数作用域中的变量 在ES 6之前,Javascript只有函数作用域的概念,没有块级作用域(但catch捕获的异常 只能在catch块中访问)的概念(IIFE可以创建局部作用域).每个函数作用域都是封闭的,即外部是访问不到函数作用域中的变量. function getName() { var name = "美女的名字&
-
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量.函数声明和函数的形参)作为属性存储在变量对象中. 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段. 这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题--作用域链. 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain/ 中文参考:http://www.denisdeng.com/?p
-
javascript 嵌套的函数(作用域链)
嵌套的函数(作用域链) 当你进行函数的嵌套时,要注意实际上作用域链是发生变化的,这点可能看起来不太直观.你可把下面的代码置入firebug监视值的变化. 复制代码 代码如下: var testvar = 'window属性'; var o1 = {testvar:'1', fun:function(){alert('o1: '+this.testvar+'<<');}}; var o2 = {testvar:'2', fun:function(){alert('o2: '+this.testv
-
JS 作用域与作用域链详解
(1)作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域. 1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用域(function scope),属于局部变量 局部变量优先级高于全局变量 复制代码 代码如下: var name="one"; function test(){ var name="two"
-
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
函数表达式 1.JavaScript中定义函数有2钟方法: 1-1.函数声明: 复制代码 代码如下: function funcName(arg1,arg2,arg3){ //函数体} ①name属性:可读取函数名.非标准,浏览器支持:FF.Chrome.safari.Opera. ②函数声明提升:指执行代码之前会先读取函数声明.即函数调用可置于函数声明之前. 1-2.函数表达式: 复制代码 代码如下: var funcName = function(arg1,arg2,arg3){ //函
-
JavaScript中的作用域链和闭包
作用域 全局作用域 局部作用域 作用域链 执行上下文 活动对象 闭包 闭包优化 JavaScript中出现了一个以前没学过的概念--闭包.何为闭包?从表面理解即封闭的包,与作用域有关.所以,说闭包以前先说说作用域. 作用域(scope) 通常来说一段程序代码中使用的变量和函数并不总是可用的,限定其可用性的范围即作用域,作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突. 全局作用域(Global Scope) 在代码中任何地方都能访问到的对象拥有全局作用域,以下几种情形拥有全局作
-
js作用域及作用域链概念理解及使用
(1)作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域. 1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用域(function scope),属于局部变量 局部变量优先级高于全局变量 var name="one"; function test(){ var name="two"; console.log
-
深入理解JavaScript高级之词法作用域和作用域链
主要内容:1.分析JavaScript的词法作用域的含义 2.解析变量的作用域链 3.变量名提升时什么 最近在传智播客讲解JavaScript的课程,有不少朋友觉得JavaScript是如此的简单,但是又如此的不知如何使用,因此我准备了一些内容给大家分享一下. 这个系列主要讲解JavaScript的高级部分的内容,包括作用域链.闭包.函数调用模式.原型以及面向对象的一些东西. 在这里不包含JavaScript的基本语法,如果需要了解基础的同学可以到http://net.itcast.cn里面去下
随机推荐
- Linux性能测试 pmap命令详解
- js 翻转颜色实现代码
- VC6.0如何创建以及调用动态链接库实例详解
- ASP.NET 用户多次登录的解决方法
- 用PHP解决的一个栈的面试题
- Android RelativeLayout相对布局属性简析
- 使用 Python 获取 Linux 系统信息的代码
- 浅析Python 中整型对象存储的位置
- 详解struts2的token机制和cookie来防止表单重复提交
- C#中的delegate委托类型基本学习教程
- mysql 一个较特殊的问题:You can't specify target table 'wms_cabinet_form'
- MySQL5.7.14下载安装图文教程及MySQL数据库语句入门大全
- MySQL OOM 系统二 OOM Killer
- jQuery 表单验证扩展代码(二)
- jQuery EasyUI菜单与按钮详解
- JS简单验证上传文件类型的方法
- java实现 微博登录、微信登录、qq登录实现代码
- Android植物大战僵尸小游戏
- 在Java的Hibernate框架中使用SQL语句的简单介绍
- C#中的yield关键字的使用方法介绍