JS 之作用域链和闭包
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 之作用域链和闭包的更多相关文章
- js之作用域链到闭包
一.作用域 全局作用域和函数作用域(局部作用域). 一个变量的作用域就是源代码中定义这个变量的区域. 二.作用域链和闭包 全局变量只有一个(window,globel),全局环境下每一个函数都会形成一 ...
- 深入理解JS函数作用域链与闭包问题
function fun(n,o) { console.log(o) return { fun:function(m){ return fun(m,n); } }; } ); a.fun(); a.f ...
- js深入(三)作用域链与闭包
在之前我们根绝对象的原型说过了js的原型链,那么同样的js 万物皆对象,函数也同样存在这么一个链式的关系,就是函数的作用域链 作用域链 首先先来回顾一下之前讲到的原型链的寻找机制,就是实例会先从本身开 ...
- JS详细图解作用域链与闭包
JS详细图解作用域链与闭包 攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你 ...
- 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This
参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...
- 前端高质量知识(四)-JS详细图解作用域链与闭包
攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法 ...
- 在chrome开发者工具中观察函数调用栈、作用域链与闭包
在chrome开发者工具中观察函数调用栈.作用域链与闭包 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量 ...
- js中作用域链的问题
为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止 ...
- 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包
在前端开发中,有一个非常重要的技能,叫做断点调试. 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象, ...
随机推荐
- addslashes() 函数和stripslashes()函数
addslashes() 函数 定义和用法 addslashes() 函数在指定的预定义字符前添加反斜杠. 这些预定义字符是: 单引号 (') 双引号 (") 反斜杠 (\) NULL 语法 ...
- 第三个Sprint冲刺第一天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:再度强化四则运算app的功能.
- ex26 纠正练习
题目中给出的代码如下: def break_words(stuff): """This function will break up words for us." ...
- C++学习笔记22:设备
设备类型 设备文件的性质 设备文件不是普通的磁盘文件 读写设备的数据需要与相应的设备驱动器通信 设备文件的类型 字符设备:读写串行数据字节流,如串口.终端等 块设备:随机读写固定尺寸数据块,如磁盘设备 ...
- 在 Mac OS X Yosemite 10.10.5 上配置 OpenGL 编程环境
这个教程主要参考了youtube上的视频 Getting Started in OpenGL with GLFW/GLEW in Xcode 6 ,这个视频有点问题,不能照搬.本人通过自己摸(瞎)索( ...
- Python笔记 001
#python版本:3.5.2 #for循环 for letter in ("xuyingke"): #默认循环 print ("当前字母:",letter) ...
- 【NOIP2005】过河
感觉这题好玄--最后看了chty的代码才过,我现在这样必须看题解才能A题怎么办嘛qaq 原题: 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上 ...
- JavaBean基本用法示例(一)
一.首先创建一个类person,里面有四个成员:name,sex,age,info,添加四个成员所有的set和get方法. package com.kaly.bean; public class pe ...
- 黑马程序员——JAVA基础之GUI
-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- GUI(图形用户界面) GUI • Graphical User Interface(图形用 ...
- 重定向 url cookie
想象下面两行伪代码: 1. setCookie(...);2. redirect(new_web_url); 首先设置一个Cookie,然后重定向到另外一个网址,这个网址跟当前网站的域名不同 在多数情 ...