Zonebit

个人的奋斗还是历史的进程?

View the Project on GitHub

5 November 2018

js中一些概念的理解补充

by ganlyun

高阶函数

定义:可以接受另一个函数作为参数的函数就是高阶函数 比如数组的forEach, map, reduce, every, some, filter, sort等方法

纯函数

定义: 对于一个函数,给定一个输入,返回一个唯一的输出。除此之外,不会对外部环境产生任何附带影响。 传入的参数如果是引用对象,通过深复制产生一个新的对象再进行修改、返回,这样就达到了纯函数的目的

词法作用域和动态作用域

词法作用域关注点是Write-Time,即编程时的上下文,而动态作用域以及常见的this的用法,都是Run-Time,即运行时上下文。

表达式

JS解释器会进行计算并返回一个值的短语,注意表达式语句expression statement和声明语句declaration statement

语句

JavaScript程序就是一系列可执行语句的集合

变量提升

函数声明提升优先

var getName=function(){
  console.log(2);
}

function getName(){
  console.log(1);
}

getName();
//结果为2

//函数、变量声明提升后
function getName(){    //函数声明提升到顶部
  console.log(1);
}

var getName;    //变量声明提升
getName = function(){    //变量赋值依然保留在原来的位置
  console.log(2);
}

getName();    // 最终输出:2

尾调用

一个函数执行时的最后一个步骤是返回另一个函数的调用,这就叫做尾调用。

尾调用优化

function foo () { console.log(111); }
function bar () { foo(); }
function baz () { bar(); }

baz();

//优化后
function foo () { console.log(111); }
function bar () { return foo(); }
function baz () { return bar(); }

baz();

调用图对比

优化前

优化后

尾递归

当一个函数尾调用自身,就叫做尾递归。

tags: 高阶函数 - 纯函数 - 词法作用域 - 动态作用域 - 表达式 - 语句 - 变量提升