函数
- 函数的声明
- 如何调用函数
- 什么call stack
- this 和arguments
- 作用域
- 闭包
函数声明的五种方式
(1)具名函数:
function x(输入1,输入2){ return undefined}
通过console大法可以将x函数输出,虽然console
只能输出字符串,但是当console
的内容为函数时,会直接调用函数的toString()
方法从而实现函数的输出
(2)匿名函数
var x = function (input1,input2){return }
匿名函数前面必须有变量声明,否则浏览器会报错
(3)具名函数的另一种表达形式
var x = function y( return)
注意这种调用方式就必须是
x.toString()
,如果是y.toString()
就会出现报错var x = function y(input1,input2){
console.log(y)
}
//A 函数 B undefined
//B
(4)window.Function函数
new Function('x','y','return x+y')
var n = 1;
f = new Function('x','y','return x+'+n+'+y')
f(1,2) // 4
(5)箭头函数
i: f=(x,y)=>{return x+y}
ii: 省略return的写法f=(x,y) => x+y
iii: 只有一个参数的简单写法:
f=n =>n*n
f(3)
//9
五种函数声明的name属性
function f(){}
f.name
//"f"
var f2 = function(){}
f2.name
//"f2"
var f3 = function f4(){}
f3.name
//"f4"
var f5 = new Function('x','y','return x+y'}
f5.name
//"anonyomous"
f = (x,y)=>{return x+y}
f.name
//"f"
如何调用函数
简单的调用:
function f(x,y){'x','y','return x+y'}
f(1,2) //调用的实现
阮一峰在介绍函数时是这样说的:
函数就是一段可以反复调用的代码块,其还可以接受输入不同的参数,不同的参数会返回不同的值
例如求三角形的面积:
function 求三角形的面积('width','height'){
var mianji = (width * height)/2;
return mianji;
}
求三角形的面积(4,5)
求三角行的面积(5,6)
//宽是4,高是5时,得出的面积是10
//宽是5,高是6时,得出的面积是15
所以随着高和宽的不断变化, 面积都可以实现得出不同的结果
函数的调用在内存图中的显示:
通过上图可以得知函数的调用需要
call()
参与进来
var f ={}
f.params = ['x','y']
f.fbody = 'console.log(1)'
f.call = function(){
eval(f.fbody)
}
f.call() //执行这个函数函数体
// 1
所以通过上述的介绍我们可以简单的知道函数的调用有两种:
(1)f()
(2)f.call()
//以上上为例f.call()的调用:f.call(undefined , 1, 2)
第一种为小白写法,第二种虽然操作起来比较麻烦,但是给专门喜欢炫技的老司机使用
网友评论