javascript作用域、作用域链(菜鸟必看)


Posted in Javascript onJune 16, 2016

javascript的作用域和作用域链是我学习最痛苦的一部分,因为我花了好多时间看了好多技术文档都没有理解.大体知道什么意思了,然后还说不出之所以然来.

通过我大量的测试和看技术文档总结了以下理解,虽然不是很有技术范但是确实能理解了。

1、javascript只有全局和局部之分,那些后台语言的各种修饰符都没有。在函数中不使用var则为全局。如下:

<script type="text/javascript"> 

varname="c#";//全局

window.name="java";//全局 

varlanguage=function() 

{ 

alert(name); 

name="javascript";//全局 

var name="JS";//局部 

alert(name); 

}() 

  

alert(name); 

</script>

上面代码中表示为全局的在都指向同一个变量,下面的定义会替换上面的。关于三个alert分别是underfind,js,javascript.这就是作用域起了作用了。

2、作用域链从0级开始依次往下排,所谓的依次往下排指的是子级的排列。在寻找变量的时候先从同级找再找父级。

在上面的例子中,

首先弹出的是language方法里的第一个alert,如果window全局是0,那么在例子中var name="js"这个就是1.第一个alert就在1中找,如果找不到在去0中找。这是它发现了同级有一个var name="js"但是它目前还没有赋值,所以弹出underfind

第二个弹出是language方法里的第二个alert,同样的他会在1里找也就是方法内部。他找到了name而且赋值了js,所以弹出的是js

第三个弹出是最下面的alert,由于在方法内部已经给全局name重新赋值了,导致弹出的是javascript。

然后增加下一个链路我们在language中顶一个方法,如下:

<scripttype="text/javascript"> 

varname="javascript";//全局 

window.name="javascript";//全局 

varlanguage=function() 

{ 

alert(name); 

name="javascript";//全局 

varname="JS";//局部 

alert(name); 

  

var lovelanguage=function(){

alert(name); 

}(); 

}() 

  

alert(name);

</script>

此时lovelanguage里的alert弹出的是js因为他会找上一级也就是language里的name,所以。。。

以上就是小编为大家带来的javascript作用域、作用域链(菜鸟必看)的全部内容了,希望大家多多支持脚步之家。

Javascript 相关文章推荐
关于B/S判断浏览器断开的问题讨论
Oct 29 Javascript
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
javascript 页面划词搜索JS
Sep 28 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
Sep 14 Javascript
jquery中键盘事件小结
Feb 24 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
详解VUE中v-bind的基本用法
Jul 13 Javascript
React 实现拖拽功能的示例代码
Jan 06 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
Vue如何提升首屏加载速度实例解析
Jun 25 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 #Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 #Javascript
JavaScript对象数组排序实例方法浅析
Jun 15 #Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 #Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
Jun 15 #Javascript
jQuery动态加载css文件实现方法
Jun 15 #Javascript
异步加载JS、CSS代码(推荐)
Jun 15 #Javascript
You might like
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
PHP使用数组实现队列
2012/02/05 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python入门篇之面向对象
2014/10/20 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
班组长工作职责
2013/12/25 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
青安岗事迹材料
2014/05/14 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
通讯稿范文
2015/07/22 职场文书
远程教育培训心得体会
2016/01/09 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python