JavaScript函数

作者: 张路1806 | 来源:发表于2018-11-06 22:23 被阅读2次

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

定义

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

声明函数的方式

  1. 具名函数:function x(arguments){函数体}
  • x为函数名,函数名称可以任意取
  • arguments是参数
  • 函数体中必定会有return,假如没有浏览器自动加上
  1. 匿名函数:var x = function(arguments){函数体}
  • 匿名函数必须有变量容器,因为本身并没有函数名称,如果不使用变量包裹,则无法引用,也会被浏览器当做垃圾回收。
  • arguments是参数
  • 函数体中必定会有return,假如没有浏览器自动加上
  1. var x = function y(arguments){函数体}
  • 此时函数的名称y只能在函数内部引用
  • arguments是参数
  • 函数体中必定会有return,假如没有浏览器自动加上
  1. window.Function(全局对象声明):new Function('x','y','return x+y')
  • new是可以省略的
  • 参数为x,y,并且还可以增加
  1. 箭头函数:f = (arguments)=> {return 表达式}

函数中的return

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

如何调用函数

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

  • 函数名/变量()
  • 函数名/变量.call(undefined,arguments)

立即调用函数(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

相关文章

  • Javascript 函数缺省值

    Javascript 函数 Javascript 函数缺省值写法

  • JavaScript函数式编程

    读完《JavaScript函数式编程》《JavaScript函数式编程指南》这两本书,对JavaScript函数式...

  • JavaScript函数式编程

    读完《JavaScript函数式编程》《JavaScript函数式编程指南》这两本书,对JavaScript函数式...

  • JavaScript函数

    layout: posttitle: JavaScript函数tags: [JavaScript, 函数]auth...

  • JavaScript encodeURI() 函数

    JavaScript encodeURI() 函数 JavaScript 全局函数](https://www.ru...

  • JavaScript中的函数

    @(javascript)[js函数] [toc] JavaScript中的函数 函数的分类与定义函数的方式 Ja...

  • JavaScript语言基础(二)

    JavaScript内置函数,这些函数都是由JavaScript语言自身提供,是JavaScript全局方法。pa...

  • JavaScript - 函数 - 1

    #JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。函数可以通过声明定...

  • 2016-11-24

    JavaScript escape() 函数 JavaScript 全局对象 定义和用法:escape() 函数可...

  • JS 函数

    JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。函数可以通过声明定义...

网友评论

    本文标题:JavaScript函数

    本文链接:https://www.haomeiwen.com/subject/oeosxqtx.html