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 相关文章推荐
js操作ajax返回的json的注意问题!
Feb 23 Javascript
一些javascript一些题目的解析
Dec 25 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
Feb 07 Javascript
javascript scrollTop正解使用方法
Nov 14 Javascript
微信小程序使用第三方库Immutable.js实例详解
Sep 27 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
jQuery插件ajaxFileUpload异步上传文件
Oct 19 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
纯js实现隔行变色效果
Nov 29 Javascript
Vue data的数据响应式到底是如何实现的
Feb 11 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 文件扩展名 获取函数
2009/06/03 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
laravel 数据验证规则详解
2019/10/23 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python MD5加密实例详解
2017/08/02 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
python实现简单颜色识别程序
2020/02/19 Python
python实现简单学生信息管理系统
2020/04/09 Python
Python configparser模块操作代码实例
2020/06/08 Python
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
施工安全承诺书
2014/05/22 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
不同意离婚代理词
2015/05/23 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
nginx配置指令之server_name的具体使用
2022/08/14 Servers