本篇文章给大家带来的内容是关于js的function函数是什么?js中function的用法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
Function与函数
Function是JavaScript提供的一种引用类型,通过Function类型创建Function对象。
在JavaScript中,函数也是以对象的形式存在的,每个函数都是一个Function对象。
//字面量方式创建函数var fun =function () { console.log(100)};//函数声明方式创建函数function fn () { console.log(200)};var f = new Function('a','console.log(a)');f(2);//以函数方式调用Function类型
Function的apply()方法
Function的apply()方法用于调用一个函数,并且接受指定的this值,以及一个数组作为参数。
//定义函数function fun(value) { console.log(value)}fun.apply(null,['100']);
Function的call()方法
Function的call()方法用于调用一个函数,并且接受指定的this值,以及参数列表。
var fun = function (value,a,b,) { console.log(value,a,b,)}fun.call(null,2,3,4);//2 3 4Function的bind方法
Function用于创造一个新的函数,称为绑定函数,并且接受指定的this值作为参数,以及参数列表
var fun = function (a,b,c) { console.log( a,b,c)}var v =fun.bind(null,2,3,4);v();//2 3 4没有重载
在其他开发语言中,函数有一种特性叫做重载。就是定义多个同名的函数,但没一个函数接收的参数个数不同,程序会根据调用时传递的实参个数进行判断,具体调用的是哪个函数。
单JavaScript中函数是没有重叠现象的,如果定义多个同名的函数,只有最后一个定义的函数是有效的。
arguments对象
虽然没有重载,但是JavaScript提供了argumengs对象可以模拟函数重载的现象。
function fun() { var num = arguments.length; switch (num){ case 2://参数个数 return arguments[0]+arguments[1]; break; case 3: return arguments[0]+arguments[1]+arguments[2]; break; }}console.log(fun(4,5));//9console.log(fun(4,5,6));//15递归
在函数体内调用自身的函数被称之为递归函数。在某种意义上来说,递归近似于循环。两者都重复执行相同的代码,都需要一个终止条件来避免无限循环和无限递归。
在一个函数体内,想要调用自身函数,有一下两种方式
通过使用自身函数名实现
通过使用arguments对象的callee属性来实现
function fn(v) { console.log(v); if (v>=5){ return } //使用该方法终止递归当执行下列代码输出时,报错 arguments.callee(v+1)}var f = fn;fn=null;f(0);特殊函数
匿名函数
在JavaScript中,当把函数当做数据使用时,可以不设置名字。匿名函数的两种用法
可以将匿名函数作为参数传给其他函数。
可以定一某个匿名函数执行某些一次性任务。
回调函数
当一个函数作为另一个函数的参数时,作为参数的函数被称之为回调函数。
//作为另一个函数参数的函数fun->回调函数var fun = function () { return 2;};function fn(v) { return v();}//以上代码等同于以下代码//以下代码中作为参数的函数->匿名回调函数var f = fn(function(){return 2;});console.log(f);自调函数
自调函数就是在定义函数后自行调用
(function () { console.log('23')})()//23->后边的括号表示调用作为值的函数
一个函数作为另一个函数的结果进行返回,作为结果返回的函数称之为作为值的函数
var one = function(){ return 100;}// 作为值的函数 -> 内部函数的一种特殊用法function fun(){ var v = 100; // 内部函数 return function(){ return v; };}var result = fun();// console.log(result);// one函数// console.log(result());// 100console.log(fun()());闭包
作用域链
作用域链就是指局部作用域可以访问它的父级所能访问的作用域
var a = 10;// 全局变量function fun(){ var b = 100;// fun函数作用域的局部变量 // 内部函数 function fn(){ var c = 200;// fn函数作用域的局部变量 // 内部函数 function f(){ var d = 300;// f函数作用域的布局变量 // 调用变量 console.log(a);// 10 console.log(b);// 100 console.log(c);// 200 console.log(d);// 300 } f(); // 调用变量 // console.log(a);// 10 // console.log(b);// 100 // console.log(c);// 200 // console.log(d);// d is not defined } fn(); // 调用变量 // console.log(a);// 10 // console.log(b);// 100 // console.log(c);// c is not defined // console.log(d);// d is not defined}fun();闭包
当内部任何一个函数被通过一种方式被任何一个外部作用域访问时,就是一个闭包。
var n;// 定义变量,但不初始化值function fun(){// 函数作用域 var v = 100; // 进行初始化值 -> 一个函数 n = function(){ console.log(v); } // n();}fun();n();// 100闭包的作用
提供可享的局部变量
保护共享的局部变量,提专门读写变量的函数
避免全局污染
相关推荐:
JavaScript Function函数类型介绍
浅析JS中对函数function的理解
ECMAScript中函数function类型_javascript技巧

