饥人谷技术博客

JavaScript函数

2018-11-06  本文已影响2人  张路1806

今天谈谈函数的基本概念,其实数学中的函数和编程中的函数相当类似,但个人认为在编程中的函数更为复杂。

定义

JavaScript中的函数是一种原型链中有函数原型(Function-prototype)的一种对象。

声明函数的方式

  1. 具名函数:function x(arguments){函数体}
  1. 匿名函数:var x = function(arguments){函数体}
  1. var x = function y(arguments){函数体}
  1. window.Function(全局对象声明):new Function('x','y','return x+y')
  1. 箭头函数:f = (arguments)=> {return 表达式}

函数中的return

函数必须有返回值,而返回值是用return表示起始,返回的值是由return的下一句代码确定,而之后的代码则不再运行。假如不写,系统默认返回值是undefined。

如何调用函数

生成函数之后可以有两种写法调用函数

立即调用函数(IIFE)

有时候必须在声明函数的时候就调用函数,那么写法如下:

(function(){ /* code */ }());
// 或者
(function(){ /* code */ })();

使用立即调用函数的时候,最后的分号最好加上。

函数的name属性

具名函数name就是其函数名
匿名函数的name就是其变量名称
第三种声明方式下的函数name是函数名
全局对象情况下,函数name是‘anonymous’

函数的length属性

函数的length属性的值只和声明时有关,只等于声明时函数参数个数。

函数的基本用法就这些,现在来谈谈函数更深入的使用

函数的toString属性

.toString是函数原型(Function.prototype)上的一个key,其属性会覆盖对象原型(Object.prototype)上的tostring属性,而函数原型中,这个属性的value是函数体的源码,用字符串形式储存。

调用函数和toString的关系

调用时会执行这段源码,用的是eval()的命令执行之。

function和var的相似之处

相同:

  1. function和var都是关键字
  2. function和var的声明都会提升到代码的最前面

不同之处:

  1. function只能声明函数,var只可以声明变量

函数的作用域

函数的作用域只和初始声明时函数作用域相关,与调用函数时函数所处的位置无关

var a = 1;
var x = function () {
  console.log(a);
};

function f() {
  var a = 2;
  x();
}

f() // 1

函数内部变量也是局部提升的

闭包:如果一个函数使用了他作用域之外的变量,那么(这个函数和这个变量)就叫做闭包。

var n = 999;

function f1() {
  console.log(n);
}
f1() // 999
上一篇 下一篇

猜你喜欢

热点阅读