JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)
JavaScript作用域
1. 全局作用域(Global Scope)
function doSomething(){
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误
(2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:
var authorName="山边小溪";
blogName="梦想天空";
alert(authorName);
}
doSomething(); //山边小溪
alert(blogName); //梦想天空
alert(authorName); //脚本错误
1. 局部作用域(Local Scope)
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(blogName); //脚本错误
innerSay(); //脚本错误
作用域链(Scope Chain)
var sum = num1 + num2;
return sum;
}
作用域链和代码优化
1
2
3
4
5
|
function changeColor(){
document.getElementById( "btnChange" ).onclick= function (){
document.getElementById( "targetCanvas" ).style.backgroundColor= "red" ;
};
}
|
var doc=document;
doc.getElementById("btnChange").οnclick=function(){
doc.getElementById("targetCanvas").style.backgroundColor="red";
};
}
改变作用域链
with(document){
var bd=body,
links=getElementsByTagName("a"),
i=0,
len=links.length;
while(i < len){
update(links[i++]);
}
getElementById("btnInit").οnclick=function(){
doSomething();
};
}
}
doSomething();
}catch(ex){
alert(ex.message); //作用域链在此处改变
}
请注意,一旦catch语句执行完毕,作用域链机会返回到之前的状态。try-catch语句在代码调试和异常处理中非常有用,因此不建议完全避免。你可以通过优化代码来减少catch语句对性能的影响。一个很好的模式是将错误委托给一个函数处理,例如:
doSomething();
}catch(ex){
handleError(ex); //委托给处理器方法
}
参考资料
您可能还喜欢
转载于:https://blog.51cto.com/lihongbo/818865
JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)相关推荐
- JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- [未完整]JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
转载:http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html 作用域是JavaScript最重要的概念之 ...
- 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...
- javascript 符号_理解JavaScript中“ =”符号的直观指南
javascript 符号 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 理解JavaScript中" ="符号的直观指南 (A Visu ...
- JavaScript经典进阶:javascript – 9宫格 – 拼图
项目地址:javascript – 9宫格 – 拼图 总体思路 切图 ==>打乱顺序 ==>拖拽实现数据交换 实现过程中,遇到的问题 数据随机排序方法 Array.sort( functi ...
- 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模式)中,我想要是为我们的读者贡献其摘要,那会 ...
最新文章
- 有关import sun.audio.AudioPlayer(或者其它文件)的问题
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施
- Mysql 主从数据库同步详解
- (设计模式)简单工厂模式之通过配置文件动态创建实现类
- (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。
- mysql+after+commit_P8级面试难题,after_sync vs after_commit,哪个性能更好?
- jquery扩展方法的两种形式
- 排序算法专题-快速排序
- python爬取歌词_python爬虫抓取某易云音乐歌词,从此不在下载
- VC++设置默认音频设备(附源码)
- echart渲染深圳地图
- ps批处理图片小技巧
- 虚拟货币套利怎么处理
- Quarkus 初见
- 咸鱼 转转,苹果产品真伪验证
- luci web 界面功能
- rxswift 网络请求_使用RxSwift将身份验证请求链接到多个服务
- 比尔总动员小炎觉醒任务攻略
- 【python标准库】色彩模式转换
- spring tool suit设置屏幕护眼保护色