《Eloquent JavaScript》笔记--函数;

本文详细探讨了JavaScript中的函数,包括定义、参数与作用域、闭包、递归等概念。函数是程序结构化的重要工具,其局部变量在每次调用时都会被创建。JavaScript中,只有函数能产生作用域,而闭包允许函数访问并影响其定义范围内的变量。此外,文章还介绍了JavaScript函数的递归特性,以及如何处理可选参数。最后,讨论了函数的副作用和纯粹函数的概念,强调了理解这些概念对编写高效代码的重要性。
摘要由CSDN通过智能技术生成

函数可以用来结构化大段程序;减少重复;为子程序命名,将子程序彼此分开。
编程语言有越多预先精确定义的函数,灵活性就越低,所以需要程序员自己编写函数而不是语言作者内置越多的函数就越好。

定义函数

关键字function,可选的参数,必不可少的花括号。有些函数可以返回值,有些则没有,他们只产生side effect。

return 关键字会立刻跳出函数,将表达式返回给函数调用的代码,如果return后面没有表达式则返回undefined

var makeNoise = function() {
  console.log("Pling!");
};

makeNoise();
// → Pling!

var power = function(base, exponent) {
  var result = 1;
  for (var count = 0; count < exponent; count++)
    result *= base;
  return result;
};

console.log(power(2, 10));
// → 1024

参数与作用域

参数就像普通变量,只是他们的值由调用函数的代码赋予,不是函数本身。

函数最重要的特性是,所有在函数内部声明的变量和他们的参数都是局部变量,局部变量在每次函数调用时都会被创建,并且这些“化身"不会彼此干扰。上例中,power内部的result变量,每次调用都会被创建。

相反,在函数外部声明的变量是全局变量,他们可以被整个程序包括函数内部访问到,只要函数内部没有同名的局部变量。

var x = "outside";

var f1 = function() {
  var x = "inside f1";
};
f1();
console.log(x);
// → outside

var f2 = function() {
  x = "inside f2";
};
f2();
console.log(x);
// → inside f2

上面的代码定义并且调用了2个函数,f1函数内部声明了一个局部变量x,它修改的是局部变量x。f2函数没有声明局部变量,所以函数内部的x引用的是全局变量x。

嵌套的作用域

javascript可以在函数内部创建函数,这产生了作用域的嵌套。

var landscape = function() {
  var result = "";
  var flat = function(size) {
    for (var count = 0; count < size; count++)
      result += "_";
  };
  var mountain = function(size) {
    result += "/";
    for (var count = 0; count < size; count++)
      result += "'";
    result += "\\";
  };

  flat(3);
  mountain(4);
  flat(6);
  mountain(1);
  flat(1);
  return result;
};

console.log(landscape());
// → ___/''''\______/'\_

fl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值