关于var函数作用域,闭包与let的区别应用,(前端网备份)

var a = [];
for (var i = 0; i < 10; i++) {
a[i] = (function(j){
return function(){ console.log(j); };
})(i);
}
a[7]();

var b = [];
for (let i = 0; i < 10; i++) {
  b[i] =  function(){
        console.log(i);
    };
}
b[7]();
var pubvar = 1;
这两个结果是一样的

关于闭包的var
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
ClosureExample01.htm
这个函数会返回一个函数数组。表面上看,似乎每个函数都应该返自己的索引值,即位置0 的函数
返回0,位置1 的函数返回1,以此类推。但实际上,每个函数都返回10。因为每个函数的作用域链中
都保存着createFunctions() 函数的活动对象, 所以它们引用的都是同一个变量i 。当
createFunctions()函数返回后,变量i 的值是10,此时每个函数都引用着保存变量i 的同一个变量
对象,所以在每个函数内部i 的值都是10。但是,我们可以通过创建另一个匿名函数强制让闭包的行为
符合预期,如下所示。

原文地址:https://www.cnblogs.com/lsc-boke/p/10996889.html

时间: 2024-08-03 18:39:47

关于var函数作用域,闭包与let的区别应用,(前端网备份)的相关文章

javascript的函数,作用域,闭包

函数具有两个功能,一个是声明创建功能,在声明时就创建了一个函数对象,另一个是运行功能,在函数体内进行逻辑操作. 首先看下面的例子: function Fn(){console.log("Fn")}; Fn(); 第一句是函数的声明时,第二句是函数运行时.function类型的对象比object类型的对象多了个运行时.那么我们来了解一下这两个时间里,函数做了什么? 函数在声明时: 创建了一个函数对象(作为当前所在的函数对象的OA对象的属性,这句的理解要看完运行时),并且为这个函数对象添加

JavaScript中的匿名函数及函数的闭包以及作用域

1. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

函数之闭包的基础----作用域链

理解闭包我觉得需要事先了解下面的概念和知识: 作用域(链),变量对象(活动对象),执行环境. 依次解释概念: 作用域:我们知道变量的 作用域就是程序源代码中定义这个变量的区域.(犀牛书)分为 全局作用域 和 局部作用域.(重复之前的:函数参数也是局部变量,它们只在函数体内有定义.)函数定义是可以嵌套的,所以就会有函数作用域. 函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的.就是说,在函数体定义了一个变量,这个变量在这个函数体内始终有定义,并且,嵌套在该函数里的嵌套

理解函数作用域与闭包

前言 但凡读书,或者学一门技术,都要问自己以下几个问题. 它是什么? 它有什么用?/发明它是为了解决什么问题? 它有什么弊端? 我下面就试着从这几个方向来阐述闭包这个概念. 概念 在了解闭包之前,我们需要了解几个概念.本文在这里只做简单介绍,如需要进一步了解,请参考文章末尾的链接. 作用域 变量和函数的可作用范围,分为局部作用域和全局作用域.Javascript不具有块级作用域,而具有函数作用域. 执行环境(execuation context) 变量和函数有权访问的其他数据. 执行环境栈(ex

读书时间《JavaScript高级程序设计》三:函数,闭包,作用域

上一次看了第6章,面向对象.这里接着看第7章. 第7章:函数表达式 定义函数有两种方式:函数声明.函数表达式 //函数声明 function functionName(arg0,arg1,arg2){ //code... } //函数表达式 var functionName = function(arg0,arg1,arg2){ //code... }; 函数声明有个重要的特征是函数申明提升.就是在执行代码前会先读取函数声明,意味着可以把函数声明放在调用它的语句后面. //函数声明提升 sayH

javascript回调函数,闭包作用域,call,apply函数解决this的作用域问题

在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实际上是一种对象,它可以“存储在变量中,通过参数传递给(别一个)函数(function),在函数内部创建,从函数中返回结果值”. 因为function是内置对象,我们可以将它作为参数传递给另一个函数,延迟到函数中执行,甚至执行后将它返回.这是在JavaScript中使用回调函数的精髓.本篇文章的剩余部

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式

本节课重要知识点内容如下: 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式 1.函数嵌套 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数 def bar(): print('from nbar')def foo(): print('from foo') bar()foo()def max2(x,y): if x > y: return x else: return ydef max4(a,

09 匿名函数、函数作用域、闭包、递归

匿名函数(lambda) 语法规则: lambda 参数:表达式 filter(lambdax: x>10, li) 匿名函数:可以赋给一个变量,重复使用. fun1 = lambda x: x * 10 print(fun1(10)) 打印结果: 100 fun = (lambda x: x * 10)(5) print(fun) 打印结果: 50 函数作用域 01外部不能访问函数内部变量: def fun1(): x = 1 print(x) 02函数内部能够访问函数外部变量: x = 12