文章目录
- 函数
- 调用函数
- 普通函数:
- 构造函数
- 1.函数字面量
- 2.函数声明
- 3.匿名函数
- 4.解析顺序
- js中只要函数名相同,即为重写
- js中实际参数个数可以和形式参数个数不一致,数据类型也可以不一致,
- 1.arguments:类数组对象
- 2.this:
- 3. 形参
- 作为值:
- 作为返回值
函数
function say(){}say()funciton run(){}Number()new Object()
调用函数
js中,所有函数的内部结构都是一样的
普通函数:
function say(){}Number()
构造函数
new Object()函数就是一个对象
1.创建函数
1.函数字面量
var say=function(){}
2.函数声明
function say(){}
3.匿名函数
(function(){})()
function say(){alert(\"hello-say---\");}var run=function(){alert(\"run-------\");}say()run()
4.解析顺序
1. 优先解析函数的声明,然后解析使用var操作符声明的变量2.函数的参数形式参数(形参)实际参数(实参)
function enjoy(a,b){console.log(a,b);}enjoy(34,4,5,6,\"hello\");// 34,4function say(a,b){console.log(a+b);}say(1);
js中只要函数名相同,即为重写
function say(){}function say(a,b){}say();
js中实际参数个数可以和形式参数个数不一致,数据类型也可以不一致,
2.函数的调用
普通函数:函数名()构造函数:new 函数名().call 可以改变this指向.apply
3.函数的内部属性
1.arguments:类数组对象
用来保存实际参数列表length:实际参数的个数callee:用来从函数内部指向函数本身
function enjoy(a,b){//1.var a; var b;console.log(arguments.length); //输出个数 5console.log(arguments.callee); }//ƒ enjoy(a,b){enjoy(34,4,5,6,\"hello\");//1.vara; var b;console.log(arguments.length);//console.log(arguments.callee); }
2.this:
vi:兜底对象globalhtml:兜底对象window函数赖以执行的环境对象1.什么时候确定?当拥有当前this的函数被调用的时候确定2.指向谁调用当前拥有this的函数,this指向谁
例子function say(){console.log(this);//window}say();//window.say()var obj={say:function(){console.log(this);}}obj.say();//obj
3. 形参
形式参数:在声明函数时,写在function后的()中实际参数:在调用函数时,写在函数名后()中js中没有重载概念,所有函数名相同的函数,均为重写实际参数可以和形式参数的个数不一致 类型也可以随意
4.作为值的函数和作为返回值的函数
作为值:
function say(){//1001console.log(\"hello\");}function sayHello(fn){//var fn;//say->arguments[0]:1001->//arguments[0]->fn//fn:1001fn(); //俩个fn都是形参}sayHello(say);//say为实参
作为返回值
function say(){return function(){console.log(\"hello\");}}var result=say();result();console.log(result);
5. 函数的属性
say.length:形式参数个数函数的调用:this->指定函数内部this值call(this,实参列表)apply(this,[实参列表])prototype:原型对象
function say(a,b){console.log(arguments);console.log(this);}//say(1,2,3,4,5);//say.call({},3,4,5); //把this指向改为{},给a赋值3,给b赋值4var obj={say:say}//obj.say.call(window,4,5,6);//把this指向改为window,给a赋值4,b赋值5obj.say.apply([],[5,6,7,8]);//把this指向[],把类数组对象给argumentsconsole.log(say.length);//打印形参个数2(a,b)