您的位置:首页 > Web前端 > JavaScript

javascript 学习 第6天 函数

2018-01-19 22:13 435 查看
1,函数

是一些特定功能的代码组合

ECMScript 中的函数 

本质上是一个对象 

函数的名字是一个指向对象的指针 

这决定了函数有两种不同的定义方法

2,声明方法定义函数

function fn(){}

3,函数表达式方法定义函数

可以定义为一个 Function 引用类型变量 

var fn=new Function();

其中最后一个参数是函数体 前面的参数是函数的参数

var fn=new Function("a","b","console.log(a+b)")
undefined
fn(1,2)
VM101:3 3

可以简化为

var fn=function(a,b){
console.log(a+b)
}
undefined
fn(1,2)
VM165:2 3

4,使用函数声明方式定义的函数会被把函数体提到前面

fa(1,2)
function fa(a,b){
console.log(a+b)
}
VM253:6 3


5,使用函数表达式方法定义的函数,只会把声明提前,并用undefined 初始化,函数体并不会被提前,调用会报错

console.log("sum:"+sum);
sum(1,2);
var sum=function(a,b){
console.log(a+b)
};

VM476:1 sum:undefined
VM476:2 Uncaught TypeError: sum is not a function
at <anonymous>:2:1
(anonymous) @ VM476:2

6,执行

也叫调用

7,返回值

当函数没用定义返回值的时候 默认返回 undefined 作为返回值

用 return 定义返回值

8,参数

函数的参数的类型不确定

函数的参数个数不确定

用 arguments 来获取参数列表 会获得一个对象

var obj;
function sum(){
obj=arguments;
};
undefined
sum(1,2,3,4,5,6)
undefined
obj

参数是按值传递的
不会按引用传递

var zhi_1={
value:'我是值 zhi_1 这个变量的值 所描述的 地址 指向的 内存位置 所存储的东西!'
};
var zhi_2={
value:'我是值 zhi_2 这个变量的值 所描述的 地址 指向的 内存位置 所存储的东西!'
}
function change(zhi_1){
zhi_1.value=" zhi_2 是不会把值传给我的!"
zhi_1=zhi_2;
return zhi_1.value;
}

undefined
change(zhi_1)
"我是值 zhi_2 这个变量的值 所描述的 地址 指向的 内存位置 所存储的东西!"
zhi_1.value
" zhi_2 是不会把值传给我的!"

9,匿名函数
函数名只是一个指针

函数没了函数名 并不会对自身的功能造成什么改变 依然可以使用

匿名函数在编写回调函数时比较方便

尽量给匿名函数 加上名字 

function sum(a,b,callback){
return callback(a,b)
}

undefined
sum
ƒ sum(a,b,callback){
return callback(a,b)
}
sum(1,2,function sum1(a,b){return a+b})
3


10,回调函数

就是把函数体本身作为参数传递给另一个函数

11,属性和方法

函数是一个特殊的对象 有自己的属性和方法

length 属性 就是在定义函数的时候所定义的参数的个数

和调用的时候传入的参数的个数无关

function fn (a,b,c){}
undefined
fn.length
3

A.call(B,a,b,c,...) 方法

function f1(a,b,c){
return a+b+c;
}
function f2(a,b){
return a+b;
}
undefined
f1.call(f2,1,2,3)
6
f2.call(f1,1,2,3)
3

在B方法的上下文 传入参数 a,b,c.. 执行 A方法
 A.apply(B,[a,b,c,...])方法 和 call 类似 只是参数是放一起传入

A.bind(B,a,b,c,...) 并不会立即执行 而 call 和 apply 是立即执行的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: