[未完整]JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
转载:http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。
JavaScript作用域
任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
1. 全局作用域(Global Scope)
在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:
(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:
var authorName="山边小溪";
function doSomething(){var blogName="梦想天空";function innerSay(){alert(blogName);}innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误
(2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:
function doSomething(){var authorName="山边小溪";blogName="梦想天空";alert(authorName);
}
doSomething(); //山边小溪
alert(blogName); //梦想天空
alert(authorName); //脚本错误
变量blogName拥有全局作用域,而authorName在函数外部无法访问到。
(3)所有window对象的属性拥有全局作用域
一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。
2. 局部作用域(Local Scope)
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。
function doSomething(){var blogName="梦想天空";function innerSay(){alert(blogName);}innerSay();
}
alert(blogName); //脚本错误
innerSay(); //脚本错误
作用域链(Scope Chain)
当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充。例如定义下面这样一个函数:
function add(num1,num2) {var sum = num1 + num2;return sum;
}
[未完整]JavaScript 开发进阶:理解 JavaScript 作用域和作用域链相关推荐
- JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- JavaScript经典进阶:javascript – 9宫格 – 拼图
项目地址:javascript – 9宫格 – 拼图 总体思路 切图 ==>打乱顺序 ==>拖拽实现数据交换 实现过程中,遇到的问题 数据随机排序方法 Array.sort( functi ...
- javascript 符号_理解JavaScript中“ =”符号的直观指南
javascript 符号 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 理解JavaScript中" ="符号的直观指南 (A Visu ...
- JavaScript开发调试篇 - JavaScript shell
博文主要内容: 主要介绍开发调试JavaScript代码的工具,用来快速测试 JavaScript 代码片段 1. JavaScript shell 的安装及使用 2. 在线调试:介绍一个功能强大的在 ...
- JavaScript大杂烩4 - 理解JavaScript对象的继承机制
JavaScript是单根的完全面向对象的语言 JavaScript是单根的面向对象语言,它只有单一的根Object,所有的其他对象都是直接或者间接的从Object对象继承.而在JavaScript的 ...
- 【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响
理解this作用域 <javascript高级程序设计>中有说到: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,t ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...
最新文章
- Centos7 防火墙和Selinux 一些简单操作命令
- 处理JSON格式的数据
- 关于读完《软件工程》之后不解的问题
- ABB SocketReceive 套接口 函数
- 梅原对justin wang 真人版
- 本地Android源代码库下载源码
- ExtJs非Iframe框架加载页面实现
- 使用指针实现char型数组,并将输入的字符倒序输出
- 关于浮点数的剪不断理还乱
- 5.SOA架构:服务和微服务分析及设计--- REST服务建模过程
- 【笔记】时间片轮转 RR 进程调度算法(Java 实现)
- 希赛软考学习包,助您快通过软考考试
- Power Designer创建概念数据模型
- 三维分子图的球面信息传递
- 2021年口碑超好旗舰:蓝牙耳机排行榜10强推荐
- 记录下对游戏主机配置的个人理解与心得
- mysql操作语句类型DQL\DML\DDL\DCL
- iTerm2 + oh-my-zsh + powerlevel9k 打造你喜欢的编码终端
- CUDA在VS中的环境搭建
- 新浪微博桌面客户端2014 v3.0.5 官方正式版