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

JavaScript 函数(作用域以及闭包)相关推荐

  1. javascript函数作用域与闭包

    8.8. 函数作用域与闭包        如第四章所述,JavaScript函数的函数体在局部作用域中执行,局部作用域不同于全局作用域.本章将解释这些内容和相关的作用域问题,包括闭包.[*] [*] ...

  2. JavaScript从作用域到闭包

    目录 作用域 全局作用域和局部作用域 块作用域与函数作用域 作用域中的声明提前 作用域链 函数声明与赋值 声明式函数.赋值式函数与匿名函数 代码块 自执行函数 闭包  作用域(scope) 全局作用域 ...

  3. 浅谈JavaScript 函数作用域当中的“提升”现象

    在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " ...

  4. 函数作用域,闭包,数据类型的题目

    第一题:函数作用域和闭包 var a = 9 function fn(){a = 0return function (b){return b+a++} } var f = fn() console.l ...

  5. JavaScript函数作用域

    JavaScript函数作用域 JavaScript作用域 作用域: 作用域指一个变量的作用范围 JS中一共两种作用域: (1)全局作用域 (2)函数作用域(局部作用域) 1.全局作用域 直接写在sc ...

  6. 你不知道的 JavaScript 笔记——作用域和闭包

    第一章:作用域是什么 程序中变量存储在哪里,需要是怎么找到它,这就需要设计一套存储以及能方便的找到它的规则,这个规则就是作用域 编译原理 JavaScript 是一门编译语言,它与传统编译语言不同,但 ...

  7. JavaScript的作用域与闭包

    JavaScript的作用域以函数为界,不同的函数拥有相对独立的作用域.函数内部可以声明和访问全局变量,也可以声明局部变量(使用var关键字,函数的参数也是局部变量),但函数外部无法访问内部的局部变量 ...

  8. 你不知道的JavaScript上卷-作用域和闭包

    1. LHS引用与RHS引用的区别: RHS:取到源值-得到某某的值 LHS:谁是赋值操作的源头-给谁赋值 function foo(a) {var b = a;return a + b; } var ...

  9. 重温JavaScript(lesson4):作用域和闭包(2)

    在lesson3中我们重温了JS作用域有关的内容,理解了JS作用域再来看闭包就非常easy了. 1.闭包的概念 先来补充一个知识点(PS:如果你觉得不好理解,就看之后代码吧~),词法作用域:" ...

  10. javaScript的作用域、闭包

    前言 JavaScript 中的闭包是相当重要的概念,并且与作用域相关知识的指向密切相关. 那么, JavaScript 中的作用域是什么? 闭包会在哪些场景中使用? 作用域 JavaScript 的 ...

最新文章

  1. Access里执行SQL
  2. 应用 Valgrind 发现 Linux 程序的内存问题 [转]
  3. nginx file not found 错误处理小记
  4. 适用于Atom Feed的Spring MVC
  5. centos7.1 postgresql10+postgis2.5离线安装
  6. 可汗学院统计学笔记 42-81集
  7. 使用ldconfig命令将/usr/local/lib加入到默认库
  8. mysql新浪微盘_Android62期视频教程全集下载
  9. flutter系列之flutter工程如何与android混编
  10. python贴吧爬虫-python贴吧爬虫
  11. linux添加字体库
  12. postman配置中文
  13. 技术能力和工作能力的联系和区别
  14. SDUT OJ C语言实验——Hello World!(printf练习)
  15. latex插图编号_LaTex技巧[26]:Latex重新为图片编号
  16. ios13 微信提示音插件_iOS13免越狱修改微信提示音方法!亲测有用!
  17. android6.0分屏插件,xposed分屏模块安卓6.0下载
  18. GIMP 快速入门(2)
  19. 加油站踩踏式逃亡?电网成大赢家?时代抛弃你的时候,真的一声不吭
  20. 移动端布局-px转vw、vh

热门文章

  1. openwrt 19 overlay 空间不足_重视 | 山西一矿井瓦斯爆炸,有限空间作业切记注意安全...
  2. 【iCore1S 双核心板_FPGA】例程十六:基于SPI的ARM与FPGA通信实验
  3. 《大型网站技术架构:核心原理与案例分析》-- 读书笔记 (2) : 大型网站核心架构要素(1) -- 性能...
  4. HDU 1048 [The Hardest Problem Ever] 字符串处理
  5. XMPP之openfire无法启动
  6. Advanced C++ --- const function
  7. MVC + LigerUI 做后台管理还真是清爽
  8. 诗歌rails 之自定义Helper模块
  9. springcloud gateway 源码解析、请求响应流程、第三方响应结果在 gateway 的经过
  10. elasticsearch 6.x (二) linux部署 kibana x-pack 安装