【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 2 函数

本文深入探讨了JavaScript中的函数定义顺序、词法作用域、函数值的概念以及闭包的实现原理。通过实例解析,解释了函数如何相互调用及局部变量在不同环境中的生存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 函数定义顺序
    计算机在开始执行语句之前,会先查找所有的 function 定义,然后保存相关的 function,我们不必去思考多个函数定义的顺序,使用函数是允许它们之间相互调用,而不用考虑那个函数在第一个位置定义。
  2. 词法作用域
    函数内部的变量集是否可见,取决于函数在程序中的位置,在函数“上面”定义的所有变量都是可见的,也就是存在于函数体内并包含函数定义的以及位于程序顶级的变量。javascript 中无法产生新的局部环境
  3. 函数值
    javascript 里的所有东西都是值,包括 function 函数。
  4. 闭包
    问题:如果创建局部变量的函数调用不在栈上了,那么局部变量会发生什么变化?下面的代码展示了这种情况:
    fucntion createFunction(){
    var local = 100;
    return function(){return local;}
    }
    一旦调用了 createFunction 函数,它就会创建一个局部变量,并且返回一个函数(该函数又返回该局部变量)。如何处理这一情况是向上函数变元问题(upwards Funarg problem),很多旧编程语言都禁用了这种形式。幸运的是 javascript 可以解决这个问题,只要这个局部变量是可达的,就会尽力保存局部变量。执行 createFunction()(创建函数并且执行),返回值是 100。
    这种特性是闭包,包裹一些局部变量的一个函数叫做闭包。该行为是我们可以创造性地使用函数值。
  5. 递归
    参考 漫谈递归
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值