1.JS无块级作用域

    <script>
function Main(){
if (1==1){
var name = "alex";
}
console.log(name);
}
Main();
</script>
执行结果:{}即块级作用域。
alex

2.JS采用函数作为作用域链

    <script>
function Main(){
var innerValue = "alex";
} Main();
console.log(innerValue);
</script>
执行结果:
Uncaught ReferenceError: innerValue is not defined

3.JS的作用域链在创建前已经生成了

示例一:

    <script>
xo = "alex";
function Func(){
var xo = "seven";
function inner(){
console.log(xo);
}
return inner;
}
var ret = Func();
ret();
</script>
执行结果:生成的作用域链为 xo("alex")----xo("undefined")----xo(使用作用域链)
seven

示例二:

    <script>
xo = "alex";
function Func(){
var xo = "eric";
function inner(){
console.log(xo);
}
xo = "seven";
return inner;
}
var ret = Func();
ret();
</script>
执行结果:生成的作用域链xo("alex")----xo("undefined")----xo("undefined")----Func[xo]("eric")----Func[xo]("seven")----inner()
seven

示例三:

    <script>
xo = "alex"; function Bar(){
console.log(xo);
} function Func(){
var xo = "seven";
return Bar;
} var ret = Func();
ret();
</script>
执行结果:作用域链分为二段:1.xo("alex")----xo
              2.xo("alex")----xo("undefined")----Func[xo]("seven")
alex

闭包:如果每个下载的JS都有自定义的全局变量,那么在导入的时候就会发生相互覆盖的现象,通过闭包可以将变量锁定在函数内。

(function(){
var a = 123;
function f1(){
console.log(a);
}
function f2(){
cocnsole.log(a);
}
})();

面向对象JS

    <script>
function Foo(name,age){
this.name = name;
this.age = age;
} Foo.prototype = {
GetInfo:function(){
return this.name + this.age;
},
Func:function(arg){
return this.name + arg;
}
}
var obj = new Foo('alex',22);
console.log(obj.name);
console.log(obj.GetInfo());
console.log(obj.Func(55));
</script>
执行结果:
alex
alex22
alex55

JS 之作用域链和闭包的更多相关文章

  1. js之作用域链到闭包

    一.作用域 全局作用域和函数作用域(局部作用域). 一个变量的作用域就是源代码中定义这个变量的区域. 二.作用域链和闭包 全局变量只有一个(window,globel),全局环境下每一个函数都会形成一 ...

  2. 深入理解JS函数作用域链与闭包问题

    function fun(n,o) { console.log(o) return { fun:function(m){ return fun(m,n); } }; } ); a.fun(); a.f ...

  3. js深入(三)作用域链与闭包

    在之前我们根绝对象的原型说过了js的原型链,那么同样的js 万物皆对象,函数也同样存在这么一个链式的关系,就是函数的作用域链 作用域链 首先先来回顾一下之前讲到的原型链的寻找机制,就是实例会先从本身开 ...

  4. JS详细图解作用域链与闭包

    JS详细图解作用域链与闭包 攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你 ...

  5. 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

    参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...

  6. 前端高质量知识(四)-JS详细图解作用域链与闭包

    攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法 ...

  7. 在chrome开发者工具中观察函数调用栈、作用域链与闭包

    在chrome开发者工具中观察函数调用栈.作用域链与闭包 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量 ...

  8. js中作用域链的问题

    为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止 ...

  9. 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包

    在前端开发中,有一个非常重要的技能,叫做断点调试. 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象, ...

随机推荐

  1. Android FM 模块学习之四 源码解析(1)

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 前一章我们了解了FM手动调频,接下 ...

  2. 网络数据包收发流程(四):协议栈之packet_type

    进入函数netif_receive_skb()后,skb正式开始协议栈之旅.先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层.比如,arp头和ip头都是紧跟在以 ...

  3. 在 Mac OS X Yosemite 10.10.5 上配置 OpenGL 编程环境

    这个教程主要参考了youtube上的视频 Getting Started in OpenGL with GLFW/GLEW in Xcode 6 ,这个视频有点问题,不能照搬.本人通过自己摸(瞎)索( ...

  4. mm/kmalloc.c

    /* *  linux/mm/kmalloc.c * *  Copyright (C) 1991, 1992  Linus Torvalds & Roger Wolff. * *  Writt ...

  5. 《C与指针》第七章练习

    本章问题 1.具有空函数体的函数可以作为存根使用,你如何对这类函数进行修改,使其更有用? answer:Have the stub(存根) print out a message when it is ...

  6. 一些java方法,一些感想

    String.valueof(),string,toString; 都是转化为字符串,如果为null的话用tostring会报空指针异常,String的效率最高,string.valuof效果最好. ...

  7. UltraEdit 所有快捷键 说明

    快捷键              命令                      说明                              -------------------+------- ...

  8. 2016HUAS_ACM暑假集训2G - Who's in the Middle

    这个题真的没什么好说的.一个排序就能解决的问题.唯一感到不爽的是这道题不是0msAC的,希望各位大神能够给我点指导. 头文件#include<algorithm>,注意一下排序函数的用法就 ...

  9. Apache配置代理服务器的方法(1)

    众所周知Apache是目前最优秀的HTTP服务器.实际上它不仅能当作服务器使用,也能够被用来架设代理服务器.本文就如何使用Apache架设HTTP代理服务器进行说明. 本文将基于Win32版的Apac ...

  10. [转]MYSQL远程登录权限设置

    Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录:   1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED B ...