[译]Javascript中的闭包(closures)

本文翻译youtube上的up主kudvenkat的javascript tutorial播放单

源地址在此:

https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b

 

本次视频中我们将通过例子来理解Javascript中的闭包(closure)

 

什么是闭包(closure)?

 

一个闭包就是一个在函数内部的一个函数,而且该函数能够使用其本身的变量和全局变量.内部函数不止能用其外部包裹的函数的变量,同时也可以使用外部函数的参数.一般来说就是通过在一个函数内部中添加一个新的函数来制造闭包的

 

Javascript闭包例子

function addNumbers(firstNumber, secondNumber) 
{var returnValue = "Result is : ";// This inner function has access to the outer function's variables & parametersfunction add() {return returnValue + (firstNumber + secondNumber);}return add();
}var result = addNumbers(10, 20);
document.write(result);

Output : Result is : 30

 

以下的代码返回内部函数表达式

function addNumbers(firstNumber, secondNumber) 
{var returnValue = "Result is : ";function add() {return returnValue + (firstNumber + secondNumber);}// We removed the parentheses. This will return the inner function expression without executing it.//我们移出了add后面的小阔号,这样就会返回一个内部函数表达式了
  return add; }// addFunc will contain add() function (inner function) expression. // addFunc将包含一个add()函数表达式
var addFunc = addNumbers(10, 20); // call the addFunc() function and store the return value in result variable
//呼出addFunc()函数,并且把返回的值存储在result这个变量里
var result = addFunc();document.write(result);

返回并且运行内部函数

function addNumbers(firstNumber, secondNumber) 
{var returnValue = "Result is : ";function add() {return returnValue + (firstNumber + secondNumber);}// We removed the parentheses. This will return the inner function add() expression without executing it.//我们删除掉了add后面的小括号,这将返回内部函数add()表达式    

  return add; }// This returns add() function (inner function) definition and executes it. Notice the additonal parentheses. //这一段会返回add()函数的定义并且运行它,注意到(10,20)后面的小括号了吗

var result = addNumbers(10, 20)();document.write(result);

 

转载于:https://www.cnblogs.com/otakuhan/p/7776963.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、PyCharm 创建Django 第一个项目

PyCharm 下创建Django项目 File->New Project->Django 目录说明: dj: 项目的容器。manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。dj/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。dj/…

linux last failed login表示什么意思_Linux用户

Linux的用户在登录(login)之后,就带有一个用户身份(user ID, UID)和一个组身份(group ID, GID)。在Linux文件管理背景知识中,我们又看到,每个文件又有九位的权限说明,用来指明该文件允许哪些用户执行哪些操作(读、写或者执行)。(参…

CSS3详解:transform、transition

CSS3 transform是什么? transform的含义是:改变,使…变形;转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() / scale() / translate(,) ,分别还有x、y之分&#xf…

D. Flowers

D. Flowers 一个简单线性dp#include <bits/stdc.h> using namespace std; #define int long long const int mod 1e9 7; int a[(int)2e6]; signed main() {int t, k;cin >> t >> k;a[0] 1;for (int i 1; i < 1e5 5; i){a[i] a[i - 1];a[i] % mod;i…

逆向映射是干嘛的anon_vma, vma, anon_vma_chain

逆向映射是为了从page得到进程信息&#xff0c;里面有三个比较重要的结构体&#xff1a; mm_area_struct, anon_vma_chain, anon_vma 想象一种复杂的场景 所以其实一个进程对应着很多anon_vma才对 进程A&#xff1a;mmap了16K的匿名页出来&#xff0c;这16k应该是有一个vma&…

1359C. Mixing Water

C. Mixing Water 一个简单的思维。 因为是一隔一的&#xff0c;所以要么热水多放一个&#xff0c;要么冷水和热水一样多。 设热水与要求的差为cou1&#xff0c;冷水与要求的差为cou2。 所以我们先考虑两种情况&#xff1a; 1&#xff0c;cou1大于cou2&#xff0c;那么肯定是要…

读取txt文件赋值到DataGridView中

先查看txt是每条信息之间是通过什么分割&#xff0c;我是通过换行符&#xff08;\n&#xff09;分割的, 然后再看每一条信息中字段是通过什么分割&#xff0c;我的字段是通过 tab键&#xff08;\t&#xff09;分割。 第一步 先获取到txt文件的路径&#xff1a; //获取绝对路径v…

Combobox报错:row[opts.textField].toLowerCase is not a function。

使用easyui框架加载combobox。 html页面&#xff1a; <span class"search_item"><span class"item_text">账号ID:</span><span class"item_obj"><input class"easyui-textbox" type"text" name&…

c++ 线程什么时候run_多线程并发支撑基础之JAVA内存模型

Java内存模型可以说是Java并发的底层支持&#xff0c;了解Java内存模型才能正在了解Java并发。内存模型在内存中设置一个变量"value 1&#xff1b;"那么其他线程能在什么时候读取到这个结果呢&#xff1f;有可能不能立即甚至永远都读不到。比如指令顺序与源代码中的…

1476D. Journey

D. Journey 一道简单线性dp#include <bits/stdc.h> using namespace std; const int N 5e5 3; char str[N]; int a[N],b[N]; int main() {int t;cin>>t;while (t--){int n;cin>>n;cin>>str1;for (int i0;i<n;i) a[i] b[i] 1;if (str[1]L) a[1]…

润乾报表 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定:...

一、润乾报表错误内容 产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败 错误来源&#xff1a;: 数据集ds1中&#xff0c;数据源xmglxt_x3无数据库连接&#xff0c;且未设定数据连接工厂&#xff0c;请检查数据源设定&#xff1a; 二、解决方法 同事做的润乾…

1388C. Uncle Bogdan and Country Happiness

C. Uncle Bogdan and Country Happiness 纯纯DFS#include <bits/stdc.h> using namespace std; const int N 1e5 3; #define int long long int a[N], b[N], c[N]; vector<int> cun[N]; int vis[N]; int ff 1; void DFS(int x) {int res 0;int xx a[x];for (…

WPF中的数据绑定Data Binding使用小结

完整的数据绑定的语法说明可以在这里查看&#xff1a; http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料&#xff1a; Data Binding: Part 1 http://msdn.microsoft.com/en-us/library/aa480224.aspx Data Binding: Part 2 http://msdn.microsoft.com/en-us/library/aa480…

awr报告分析 mysql_AWR报告的生成和简单分析方法

生成AWR报告方法&#xff1a; 第一步&#xff1a;数据库压力测试卡开始时&#xff1a;生成第一个快照&#xff1a; Sqlexec dbms_workload_repository.create_snapshot(); 第二步&#xff1a;数据库压力测试结束时&#xff1a;生成第二个快照 Sqlexec dbms_workload_repository…

1560F1. Nearest Beautiful Number (easy version)

F1. Nearest Beautiful Number (easy version) 预处理加二分#include <bits/stdc.h> using namespace std; const int N 3e5 3; #define int long long set<int>cun1,cun2; signed main() {//单个for (int i1;i<9;i){int res 0;for (int j0;j<9;j) {res …

sqlserver 微信昵称_sql server用户名和登录名的区别和联系

在SQLSERVER数据库中&#xff0c;guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户&#xff0c;此用户就与guest用户相关联。另外SQLSERVER采取登录名-用户名的安全规则&#xff0c;和Oracle里面的schema有点像。SQLSERVER使用所…

1506G. Maximize the Remaining String

G. Maximize the Remaining String 贪心&#xff0c;放置时&#xff0c;如果前面一个小比他小&#xff0c;并且后面还有&#xff0c;那么就把前面的删除#include <bits/stdc.h> using namespace std; const int N 3e5 3; #define int long long string str; char ans[…

bzoj 1208

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 9775 Solved: 3918[Submit][Status][Discuss]Description 最近&#xff0c;阿Q开了一间宠物收养所。收养所提供两种服务&#xff1a;收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都…

.net千万级数据导出_记一次解决docker下oracle数据库故障事例

一、问题背景&#xff1a;某个项目的线上环境oracle数据库挂了&#xff0c;同事急匆匆来找我救火。我简单咨询了一些基本情况&#xff1a;线上环境&#xff0c;docker部署&#xff0c;已正常运行半年。由于宿主机的根目录硬盘空间不够&#xff0c;运维的同事想把oracle数据文件…

1644E. Expand the Path

E. Expand the Path 一道灯下黑的题目。 我们很显然知道&#xff0c;要让每个列的上限最小&#xff0c;下限最大&#xff08;同理计算行也可以&#xff09;。 所以图形应该是一个中心对称图形 所以空白部分是一个矩形&#xff08;除了一开始的地方&#xff09;&#xff0c;但是…