局部变量

对javascipt闭包的理解(转载自阮一峰大佬的网络日志)

时间秒杀一切 提交于 2020-02-12 04:49:20
转载自阮一峰大佬,方便自己阅读查看 学习Javascript闭包(Closure) 作者: 阮一峰 日期: 2009年8月30日 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。   function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!   function f1(){     n=999;   }   f1();   alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。

Javascript闭包

扶醉桌前 提交于 2020-02-12 03:51:41
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码    var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码    function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! Js代码    function f1(){     n=999;   }   f1();   alert(n); // 999 -------------------------------------------------------------------------------------------------------- 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下

深入理解javascript闭包

为君一笑 提交于 2020-02-12 03:09:45
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码 var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码   function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! Js代码   function f1(){     n=999;   }   f1();   alert(n); // 999 -------------------------------------------------------------------------------------------------------- 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的

闭包的特点

耗尽温柔 提交于 2020-02-12 00:35:25
# ### 闭包的特点 # (1)闭包的特点: ''' 内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期 (实际内存给它存储了这个值,暂时不释放) ''' def outer(num): def inner(val): return num + val return inner func = outer(10) # func = inner res = func(21) # func(21) = inner(21) print(res) # res = num + val = 10 + 21 = 31 ''' 代码解析: num 接收到普通实参10 此刻 num = 10 func = outer(10) # func = inner res = func(21) # func(21) = inner(21) print(res) # res = num + val = 10 + 21 = 31 ''' # (2) 闭包的意义 # 模拟鼠标点击的操作 ''' # 如果使用全局变量num来进行统计,因为作用域太大,容易造成漏洞.不安全 num = 0 def click_num(): global num num+=1 print(num) # 调用一次函数,累加一次num click_num() click_num() click_num()

Python3(九) 闭包

◇◆丶佛笑我妖孽 提交于 2020-02-10 20:26:16
一. 一切皆对象 函数式编程并没有标准定义,如果代码非常繁琐则考虑使用。 学习闭包的概念,不是python独有的。 其他大多数语言中的函数只是一段可执行的代码,并不是对象。 python中的函数是对象,一切皆对象。可以把函数赋值给变量: a = 1 a = '2' a = def 甚至可以把函数当作另外一个函数的参数传递或者当成返回值返回,而C#中要封装成委托。 二.什么是闭包:闭包=函数+函数定义时的环境变量 我们尝试从概念上去理解一下闭包。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。—— 维基百科 用比较容易懂的人话说,就是当某个 函数 被当成对象返回时, 夹带了外部变量 ,就形成了一个闭包。 1. code1 def curve_pre(): def curve(): pass curve() #找不到,因为curve()的作用域仅限于curve_pre()的内部 code2 def curve_pre(): def curve(): print('This is a function') pass return curve #函数可以作为结果返回 f = curve_pre() #函数可以赋值

01 程序的编译执行、变量、static和const关键字、循环的转换、指针与数组

孤人 提交于 2020-02-10 16:41:35
初学者的探索之路01 1.代码编译的几个阶段 2.程序的执行 1>程序和进程的区别: 2>内存的四个区域 3.变量的分类以及特性 4.static关键字的影响 5.const的用处(L) 6.for循环和while循环以及do-while循环之间的转换关系(L) 7.指针的分类以及特性 8.数组与指针的结合(L) 9.代码的合法性和完整性(时间与空间的平衡)(L) 附:rand()函数和srand()函数的用法 1.代码编译的几个阶段 .c .cpp 源文件 .i 预处理文件 .o(linux操作系统下) .obj(windows操作系统下) 目标文件 .exe 可执行文件 分为三个阶段:预编译、编译、链接过程 所有的#都是在预编译过程中展开的 2.程序的执行 1>程序和进程的区别: 程序执行后会进入进程。 程序是静态的,进程是动态的。 程序在运行的时候会耗损时间(cpu)和空间资源(内存)。 2>内存的四个区域 .code 代码段 .data 数据区 .heap 堆区 .stack 栈区 两个凡是 :1.凡是在函数外部定义的变量叫做全局变量 ,存储在数据区。 2.凡是在函数内部定义的变量叫做局部变量,存储在栈区。 3.变量的分类以及特性 变量可以分为 :全局变量、在函数内定义的局部变量、在块内定义的局部变量。 变量的两个特性 :可见性和生存期 可见性 :针对编译链接过程来谈论的

Python 的命名空间

依然范特西╮ 提交于 2020-02-10 02:46:39
Python命名空间的本质: 一、命名空间的定义; 二、命名空间的查找顺序; 三、命名空间的生命周期; 四、通过locals()和globals() BIF访问命名空间。 重点是第四部分,我们将在此部分观察命名空间的内容。 一、命名空间(namespace) Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。 A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。 在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。 1、每个函数都有着自已的命名空间,叫做 局部命名空间 ,它记录了函数的变量,包括函数的参数和局部定义的变量。 2、每个模块拥有它自已的命名空间,叫做 全局命名空间 ,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。 3、还有就是 内置命名空间 ,任何模块均可访问它,它存放着内置的函数和异常。 二、命名空间查找顺序 当一行代码要使用变量 x 的值时,Python 会到所有可用的命名空间去查找变量,按照如下顺序: 1、局部命名空间:特指当前函数或类的方法

python的命名空间

我们两清 提交于 2020-02-10 01:59:20
Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则。 接下来我将分四部分揭示Python命名空间的本质:一、命名空间的定义;二、命名空间的查找顺序;三、命名空间的生命周期;四、通过locals()和globals() BIF访问命名空间 重点是第四部分,我们将在此部分观察命名空间的内容。 一、命名空间 Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。 A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。 在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。 1、每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。 2、每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。 3、还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。 二、命名空间查找顺序 当一行代码要使用变量 x 的值时

多图:一文带你入门掌握JVM所有知识点

别说谁变了你拦得住时间么 提交于 2020-02-09 10:45:45
本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要去阅读专业的书籍和文档。 本文主题内容: JVM 内存区域概览 堆区的空间分配是怎么样?堆溢出的演示 创建一个新对象内存是怎么分配的? 方法区 到 Metaspace 元空间 栈帧是什么?栈帧里有什么?怎么理解? 本地方法栈 程序计数器 Code Cache 是什么? 注:请 区分 JVM内存结构(内存布局) 和 JMM(Java内存模型)这两个不同的概念! 概览 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略 ,保证了 JVM 的高效稳定运行。 上图描述了当前比较经典的Java内存布局。(堆区画小了2333,按理来说应该是最大的区域) 如果按照线程是否共享来分类的话,如下图所示: PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,就很自然而然的就记住了。不需要死记硬背。 下面让我们来了解下各个区域。 一、Heap (堆区) 1.1 堆区的介绍 我们先来说堆。堆是 OOM故障最主要的发生区域。它是内存区域中最大的一块区域,被所有线程共享,存储着几乎所有的实例对象、数组

javaScript变量作用域(scope)

两盒软妹~` 提交于 2020-02-09 02:17:15
一个变量的作用域(scope)是程序源代码中定义这个变量的区域。 全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。 然而在函数内声明的变量只在函数体内有定义,它们是局部变量,作用域是局部性的。 函数参数也是局部变量,它们只在函数体内有定义。 在函数体内,局部变量优先级高于同名的全局变量。 如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。 var scope = "global" //声明一个全局变量 function checkscope(){   var scope ="local" //声明一个同名的局部变量   return scope  //返回局部变量的值,而不是全局变量的值 } checkscope(); // =>"local" 尽管在全局作用域编写代码时可以不写var语句,单声明局部变量时则必须使用var语句。 来源: https://www.cnblogs.com/luokai/p/6085062.html