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 相关文章推荐
JavaScript中null与undefined分析
Jul 25 Javascript
js当一个变量为函数时 应该注意的一点细节小结
Dec 29 Javascript
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
利用JS轻松实现获取表单数据
Dec 06 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 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抽象工厂模式(Elgg)
2010/03/21 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
vue实现验证用户名是否可用
2021/01/20 Vue.js
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python安装Scrapy图文教程
2017/08/14 Python
基于python实现对文件进行切分行
2020/04/26 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
奥巴马演讲稿
2014/01/08 职场文书
行政办公室岗位职责
2014/03/18 职场文书
共产党员承诺书
2014/03/25 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
花田少年史观后感
2015/06/16 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang