函数小知识点

函数的五种声明方式

方法一:具名函数

function f(parameter){
    return undefined
}

函数都会有一个返回值,不写,默认返回undefined。因为一个函数必须要有一个终止的语句
注意:consol.log()永远返回undefined,它打印什么和返回的没啥关系。

var a = 1,2     //报错
var a = (1,2)   //a 的值为 2
var a = console.log(1);     //a 的值是 undefined
var a = (1, console.log(2))     //a 的值是 undefined

方法二:具名函数给一个参数

var x = function f(parameter){
    return undefined
}

区别:
方法一:可在全局访问函数f

consol.log(f);  // f(parameter){ return undefined }

方法二:只能在函数内部访问f,在函数外部无法访问。

consol.log(f);  // 报错

方法三:匿名函数

var f = function(parameter){};

匿名函数必须给一个变量

方法四:window.Function函数对象

new Funciton('x','y','return x+y')

方法五:箭头函数

f = (x,y) => {return x+y;}

箭头函数是匿名的,只能用变量去存储。
如果只有一句语句,花括号和return可以一起去掉;
如果只有一个变量,可省略圆括号。

函数的name属性

函数有一个属性————name

function f1(){}
f1.name;            //f,字符串

var f2 = function (){};
f2.name;            //f2,字符串

var f3 = function f4(){};
f3.name;            //f4,字符串

new Function('x','y','return x+y');
f3.name;            //anonymous,字符串

函数的本质

函数是一段可以反复调用的代码块。

f(1,2) === f.call(undefined,1,2)

f.call()才是函数的真正调用,模拟下call()的内部。

var f = {};
f.name = 'f';
f.params = ['x','y'];
f.functionBody = 'console.log("fff")'
f.call = function(){
    return eval(f.functionBody);
};
f.call();       //fff

thisargument

f.call(undefined,1,2);      //undefined就是this,[1,2]就是argument

call的第一个参数可以用this得到
call的第二个参数可以用argument得到

function f(){
    console.log(this);  //this 是参数 1
}
f.call(1);      //Number 对象 1
function f(){
    'use strict';   //严格模式
    console.log(this);      //this 是参数 1
}
f.call(1);      //1,严格模式模式下参数是啥就打印啥
function f(){
    console.log(this);  //this 是参数 undefined,没有就是 undefined
}
f.call();       //window,不是字符串;严格模式下会打印 undefined

你可能感兴趣的:(函数小知识点)