函数的五种声明方式
方法一:具名函数
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
this
和argument
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。