Function
函数是如许一段JavaScript代码 它只定义一次 但可以被实行或挪用屡次,Function范例是JavaScript供应的援用范例之一 经由过程Function范例建立Function对象。在JavaScript中,函数也是以对象的情势存在的,每一个函数都是一个Function对象。
定义函数的三种要领
/*1.函数的声明体式格局*/
function fun() {
console .log('this is a function');
}
fun();
/*2.字面量体式格局*/
var fn = function () {
console.log('this is a function');
}
fn();
/*3.建立Function范例的对象(就是一个函数)*/
var fun3 = new Function ('a','console.log(a)');
fun3(100);
/*语法:
var 函数名 = new Function('参数','函数体');
*/
Object与Function
/*1.Object与Function都是本身范例*/
console .log(Object instanceof Object);//true
console .log(Function instanceof Function);//true
/*2.Object本身是组织函数,一切的函数都是Function范例*/
console .log(Object instanceof Function);true
/*3.Function是援用范例,用于建立对象,是对象都是Object范例*/
console .log(Function instanceof Object);
Function属性
apply要领
Function的apply()要领用于挪用一个函数 而且接收指定的this值 以及一个数组作为参数
/*定义一个函数*/
function fun (value){
console .log('this is '+value);
}
/*第一种挪用情势,语法结构:函数称号()*/
fun('10');
/*2.第二种挪用体式格局*/
/*apply (thisArg,argArry)要领
* 参数
thisArg-this
argArry-数组,作为参数(实参的列表)
*/
fun.apply(null,['tn']);
call要领
Function的call()要领用于挪用一个函数 而且接收指定的this值作为参数 以及参数列表
/*定义一个函数*/
function fun(value){
console .log('this is '+value);
}
/*1.函数挪用*/
fun (100);
/*2.apply体式格局挪用*/
fun.apply(null,[100]);
/*3.call要领挪用*/
fun.call(null,100);
/*语法结构:函数名.call(thisArg,arg1,arg2,...)*/
bind要领
语法:
bind(thisArg,arg1,arg2,arg3….)
*作用:用于建立一个新函数(成为绑定函数)
参数
*thisArg-this * arg1,arg2...-示意参数列表 * 返回值-示意返回新的函数
function fun (value){
console .log('this is '+ value);
}
fun('20');
var f = fun.bind(null,50);
f();
arguments对象
因为JS的函数中,不存在重载,所以运用arguments对象完成模仿重载
function add(){
var num= arguments.length;
switch(num){
case 2:
return arguments[0] + arguments[1];
break;
case 3:
return arguments[0] + arguments[1] + arguments[2];
break;
case 4:
return arguments[0] + arguments[1] + arguments[2] + arguments[3];
break;
}
}
console .log(add(0,1));
console .log(add(0,1,2));
console .log(add(0, 1,2,3));
函数的递归
挪用本身的函数被称之为递归函数 在某种意义上说 递归近似于轮回 二者都有反复实行雷同的代码 而且二者都须要一个停止前提以防止无穷轮回或许无穷递归
function fn(v){
console.log(v);
if (v >= 10) {
return;
}
// fn(v + 1);
arguments.callee(v + 1);
}
// fn(0);
var f = fn;
fn = null;
f(0);
// console.log(f);
特别函数
匿名函数
匿名函数的作用:
1.将匿名函数作为参数传递给其他函数 -> 回调函数
2.将匿名函数用于实行一次性使命 -> 自调函数
回调函数
当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数
var one = function(){
return 1;
}
function fn(v){
return v();
}
或许是
var result = fn(function(){return 1;});
console.log(result);
自调函数
所谓自调函数就是在定义函数后自行挪用
/*
自调函数 - 定义即挪用的函数
* 第一个小括号 - 用于定义函数
* 第二个小括号 - 用于挪用函数
*/
// 全局作用域 - 生命周期:JavaScript文件从实行到实行终了
(function(value){
// 函数作用域 - 生命周期:从函数挪用到挪用终了
console.log('this is ' + value);
})('function');
// 表达式语法
(function(value){
// 函数作用域 - 生命周期:从函数挪用到挪用终了
console.log('this is ' + value);
}('function'));
!function(value){
// 函数作用域 - 生命周期:从函数挪用到挪用终了
console.log('this is ' + value);
}('function');
+function(value){
// 函数作用域 - 生命周期:从函数挪用到挪用终了
console.log('this is ' + value);
}('function');
作为值的函数
将一个函数作为另一个函数的效果举行返回,作为效果返回的函数称之为作为值得函数
var one = function(){
return 100;
}
function fun(){
var v = 100;
return function(){
return v;
};
}
闭包
概述
JavaScript许可函数嵌套,而且内部函数可以接见定义在外部函数中的一切变量和函数,以及外部函数能接见的一切变量和函数。然则,外部函数却不可以接见定义在内部函数中的变量和函数。当内部函数以某一种体式格局被任何一个外部函数作用域接见时,一个闭包就产生了。闭包就是该函数能运用函数外定义的变量。
特性
1.局部变量:在函数中定义有同享意义(如:缓存、计数器等)的局部变量。(注重:定义成全局变量会对外形成污染)
2.内部函数:在函数(f)中声明有内嵌函数,内嵌函数(g)对函数(f)中的局部变量举行接见
3.外部运用:函数(f)向外返回此内嵌函数(g),外部可以经由过程此内嵌函数持有并接见声明在函数(f)中的局部变量,而此变量在外部是经由过程其他门路无法接见的
作用
1.供应可同享的局部变量
2.庇护同享的局部变量 供应特地的读写变量的函数
3.防止全局污染