JavaScript 函数(作用域以及闭包)

JavaScript 函数(作用域以及闭包)

 

・执行环境及作用域

 

 执行环境定义了变量或函数有权访问的其他数据。

  每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量或函数都保存在这个对象中,

  虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。

 

  当代码在一个环境中执行时,会创建变量对象的一个作用域链。

  作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问;

  作用域的前端始终是当前执行的代码所在环境的变量对象。

 

・函数表达式

 

  定义函数的两种方式: 函数声明和函数表达式

 

  函数声明的重要特征是函数声明提升,及在执行代码之前会先读取函数声明。

  sayHi();

  function sayHi() {

        ......

  }

 

・闭包

  概念: 有权访问另一函数作用域中的变量的函数。

 

function(value1, value2) {if(value1 < value2) {return -1;} else if(value1 > value2) {return 1;} else {return 0;}
}var result = compare(5, 10);

 

 

  闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。

 

  另一个副作用: 闭包只能取得包含函数中任何变量的最后一个值。因为闭包所保存的是整个变量对象,而不是某个特殊的变量。

 

function createFunctions() {var result = new Array();for(var i=0; i<10; i++) {result[i] = function() {return i;};}return result;
}

  返回的函数数组中的每个函数的返回值都为10。

  解决方案

 

function createFunctions() {var result = new Array();for(var i=0; i<10; i++) {result[i] = (function(num) {return function() {return alert(num);};})(i);}return result;
}

 

・this对象

  全局函数中,this等于window;

  函数被作为某个对象的方法调用时,this等于那个对象;

  匿名函数的执行环境具有全局性,this通常指向window。

 

var name = "The Window";var object = {name: "My Object",getNameFunc: function() {return function() {this.name;};}
};alert(object.getNameFunc()());// 执行结果: The Window

  第一步 object.getNameFunc()作为函数方法调用,this指向的是object;

  第二步 object.getNameFunc()()作为匿名函数调用,this指向的是window;

 

转载于:https://www.cnblogs.com/dreamerjdw/p/6233534.html

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

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

相关文章

十天学会PHP(第五版),十天学会php之第五天

十天学会php之第五天学习目的&#xff1a;学会读取数据先看两个函数&#xff1a;1、mysql_query送出一个 query 字符串。 语法: int mysql_query(string query, int [link_identifier]); 返回值: 整数本函数送出 query 字符串供 MySQL 做相关的处理或者执行。若没有指定 link_i…

《DSP using MATLAB》第6章开始了

看到第6章了&#xff0c;标记一下&#xff0c;全书近一半&#xff0c;继续加油 构建滤波器的三种元件&#xff1a; 下面是函数floor和size的部分帮助截图 转载于:https://www.cnblogs.com/ky027wh-sx/p/6235509.html

codeql php,使用codeql 挖掘 ofcms

前言网上关于codeql的文章并不多&#xff0c;国内现在对codeql的研究相对比较少&#xff0c;可能是因为codeql暂时没有中文文档&#xff0c;资料也相对较少&#xff0c;需要比较好的英语功底&#xff0c;但是我认为在随着代码量越来越多&#xff0c;传统的自动化漏洞挖掘工具的…

谈谈个人代码对团队合作影响

这几天正接手一个项目&#xff0c;属于后期功能拓展&#xff0c;要拓展这个项目&#xff0c;一定程度上要看到源码的部分&#xff0c;然后烦心的事情就来了&#xff0c;这代码写的真是让人挺无语的&#xff0c;原先写完整个项目的是已有多年工作经验的开发者&#xff0c;但是整…

php 连接符.,PHP怎么在数字之间添加连接符

PHP实现数字之间添加连接符&#xff0c;我们可以通过PHP中的for循环思想来实现。这里的连接符指的是“-”符号。推荐参考&#xff1a;《PHP教程》那么对于新手来说&#xff0c;可能有一定难度。下面我们就通过简单的代码示例&#xff0c;给大家介绍PHP给数字之间添加连字符的实…

linux怎么安装git服务器,linux下安装git服务端

[rootm2 ~]# yum install -y epel-*[rootm2 ~]# yum install -y git创建仓库目录[rootm2 ~]# mkdir /mnt/githome初始化目录[rootm2 ~]# git init --bare /mnt/githome/添加一个git用户&#xff0c;用来给开发者通过ssh访问git仓库 (git-shell是禁止服务器登录)[rootm2 ~]# use…

Linux —— 常用命令集合

关机和重启命令 shutdown [选项] 时间 (添加&&#xff0c;把关机任务放在后台执行) 只有shutdown可以保存关机时资源 操作选项 重启: r 关机: h 取消一个关机任务: c 关机命令(不安全) halt poweroff init 0 (系统运行级别) 重启命令 reboot init 6 (系统运行级别…

嵌入式linux 时间同步,解决嵌入式Linux中的时区问题

如果说让我做上层软件的工作&#xff0c;我做起来可以得心应手&#xff0c;但是让我做平台方面的工作(系统问题解决、驱动编写、软件移植等工作)&#xff0c;确实不熟悉。所以很多问题都是摸着石头过河&#xff0c;没有经验。许多问题在有经验的朋友那里是小菜一碟&#xff0c;…

安装zabbix及LNMP的平台的搭建

Zabbix3.0.3安装文档 环境rhel 5.8 IP&#xff1a;192.168.0.8 需要安装&#xff1a; Nginx Php Mysql Zabbix 安装步骤&#xff1a; 一 . Nginx1.6安装 安装nginx前要先安装pcre&#xff08;支持正则表达式&#xff09;&#xff0c;最好也安装一下openssl&#xff08;可以支持…

linux脚本ls输出到变量中,bash – 将命令输出的错误消息存储到shell变量中

只需将stdout(正常输出)重定向到/ dev / null并保留stderror&#xff1a;a$(cp log.txt 2>&1 >/dev/null)看一个例子&#xff1a;$a$(cp log.txt 2>&1 >/dev/null)$echo "$a"cp: missing destination file operand after ‘log.txt’Try cp --he…

IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容

IOS 修改UIAlertController的按钮标题的字体颜色&#xff0c;字号&#xff0c;内容 UIAlertController *alertVC [UIAlertController alertControllerWithTitle:"提示" message:nil preferredStyle:UIAlertControllerStyleActionSheet];//修改标题的内容&#xff0c…

bzoj2243

2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6753 Solved: 2496[Submit][Status][Discuss]Description 给定一棵有n个节点的无根树和m个操作&#xff0c;操作有2类&#xff1a; 1、将节点a到节点b路径上所有点都染成颜色c&#xff1b; 2、询问节点…

[原创]mybatis中整合ehcache缓存框架的使用

mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别&#xff0c;除了在SqlMapConfig.xml设置二级缓存的总开关&#xff0c;还要在具体的mapper.xml中开启二级缓存。 1.开启mybatis的二级缓存 在核心配置文件SqlMapConfig.xml中加入 1 <settings> 2 <…

linux隐藏apache信息,Linux下如何隐藏Apache版本号信息

利用linux搭建服务器的时候&#xff0c;如何隐藏自己Apache的版本号呢&#xff1f;或者连Apache名字直接隐藏&#xff0c;让别有用心的不知道自己网站用的是什么web服务器&#xff1f;至于为什么隐藏版本号&#xff0c;因为网上有很多教程都是关于Apache漏洞的&#xff0c;为了…

APP里如何添加本地文本

首先考虑到用webview加载&#xff0c;那么久需要把文本转化成html的形势啊&#xff1a;如下&#xff0c;先把文字放到一个文本里&#xff0c;然后 文本转换H5: 1.在word中将文件格式布局 2.word中文本标题设为宋体标题&#xff0c;设字号&#xff0c;并显示粗体 3.word中文字设…

php杂项

php5.3新增闭包函数用法use用法&#xff08;引入变量地址且随内存中值变化而变化,跳过解析顺序直接获取函数最终值&#xff09; $obj (object) "Hello, everyone"; $callback function () use ($obj) { print "This is a closure use object, msg is: {$o…

linux内核 频率,Linux内核中CPU主频和电压调整 (三)

如何开发一个新的CPUFreq driver初始化首先&#xff0c;在一个 __initcall level 7后者以后的函数中检查内核是否运行在正确的CPU和正确的芯片组上面。如果正确&#xff0c;则通过cpufreq_register_driver() 函数&#xff0c; 注册一个cpufreq_driver结构体。cpufreq_driver结构…

CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系...

CentOS版本历史 版本 CentOS版本号有两个部分&#xff0c;一个主要版本和一个次要版本&#xff0c;主要和次要版本号分别对应于RHEL的主要版本与更新包&#xff0c;CentOS采取从RHEL的源代码包来构建。例如CentOS 4.4构建在RHEL 4.0的更新第4版。 自2006年中&#xff0c;CentOS…

eclipse linux windows 乱码,Ubuntu下Eclipse打开Windows下的工程文件乱码解决办法

Eclipse在Windows下默认使用的是GBK(包括GB2312)编码&#xff0c;而在Linux系统默认使用的是UTF-8编码&#xff0c;并且eclipse编码设置下拉列表不提供GBK编码可选项。如果eclipse打开工程或者文本乱码&#xff0c;基本可以肯定(因为常用的就这两种)这个工程/文本使用的是GBK编…

logrotate

logrotate程序是一个日志文件管理工具。用于分割日志文件&#xff0c;删除旧的日志文件&#xff0c;并创建新的日志文件&#xff0c;起到“转储”作用。可以节省磁盘空间。 logrotate命令格式&#xff1a;logrotate [OPTION...] <configfile>-d, --debug &#xff1a;deb…