JS的的作用域和闭包
来源:互联网 发布:znds网络电视论坛官网 编辑:程序博客网 时间:2024/06/11 12:21
JS的作用域在何时确定
-赋值操作(LHS);常见的是函数定义,函数传参,变量赋值等等
*取值操作(RHS);常见包括函数调用,
JS中的作用域类型
函数作用域改变函数作用域的方法functionfoo(str,a){
eval(str);
//欺骗作用域,词法阶段阶段foo()函数中并没有定义标识符,
但是在函数运行阶段却临时定义了一个b; console.log(a,b); } var b = 2; foo("var b =3;",1);
//1,3// 严格模式下,`eval()`会产生自己的作用域,无
法修改所在的作用域 functionfoo(str){
'use strict';
eval(str);
console.log(a);
//ReferenceError: a is not de ned } foo('var a =2');
JavaScript 引擎会在编译阶段进行数项的性能优化。其中有些优化依赖于能够根据代码的词法进行静态分析,并预先确定所有变量和函数的定义位置,才能在执行过程中快速找到标识符。声明提升
作用域的一些应用
最小特权原则闭包
functionfoo(){
var a =2; functionbar(){
console.log(a); }
return bar;}
var baz = foo();baz();
// 2 —— 这就是闭包的效果。在函数外访问了函数内的标识符// bar()函数持有对其父作用域的引用,
而使得父作用域没有被销毁,这就是闭包
for (var i =1; i <= 5; i++) { setTimeout(functiontimer(){
console.log(i); }, i *1000);}
// 其实我们想得到的结果是1,2,3,4,5,结果却是五个6
// 办法1for (var i = 1; i <= 5; i++) { (function(j){ setTimeout(functiontimer(){
console.log(j); }, j *1000); })(i);
//通过一个立即执行函数,为每次循环创建一个单独的作用域。} // 办法2for (var i = 1; i <= 5; i++) {
let j = i;
// 是的,闭包的块作用域! setTimeout( functiontimer(){
console.log(j); }, j *1000);}
// let 每次循环都会创建一个块作用域
functionCoolModule(){
var something ="cool";
var another = [1,2, 3]; functiondoSomething(){
console.log(something); } functiondoAnother(){
console.log(another.join(" ! ")); } // 返回的是一个对象,对象中可能包含各种函数 return { doSomething: doSomething, doAnother: doAnother };}
var foo = CoolModule();
// 在外面调用返回对象中的方法就形成了闭包foo.doSomething();
// coolfoo.doAnother();
// 1 ! 2 ! 3
阅读全文
0 0
- JS的的作用域和闭包
- js作用域和闭包的知识
- js作用域链和闭包的理解
- 你不知道的JS---作用域和闭包
- JS中的作用域和闭包的小知识点
- 变量的作用域--js闭包
- js闭包的作用
- js闭包的作用
- js的闭包与作用域/作用域链
- {{JS}}函数作用域和闭包
- js闭包和作用域
- js 作用域和闭包1
- 关于js的闭包 匿名函数和作用域的几个小点
- 闭包 和闭包的作用
- JS闭包三:闭包的作用
- js闭包实现块级作用域和私有变量的访问
- 简述JS作用域、作用域链和闭包
- JS的作用域、闭包原理以及性能问题
- 困难的串uva129(dfs)
- Java interface中方法和Object方法冲突
- 如何将多个excel文件合并成一个
- 友盟多渠道打包
- 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
- JS的的作用域和闭包
- 第四十六篇:MAC下使用 Node.js 实现一个 WebServer 服务器
- SSL P1520 牛的rp
- MATLAB实现PLA算法
- jQuery选择器(:nth-child(n))详解
- hibernate多表操作详解
- xlistview加载网页内容上拉刷新下拉加载
- Hilditch 细化(实现二)
- 【NYOJ