JS学习(JS函数知识)

JS函数,函数定义,调用等

一,了解函数
函数对于任何语言来说都是一个核心的概念。通过函数可以封装多条语句,并且在任何时候调用执行。ECMAScript中函数使用function关键字来声明,后跟一组参数以及函数体。
函数的基本语法如下所示。

Function functionName(arg0,arg1,arg2....){
Statements
}
//函数示例
Function sayHi(name,message){
alert(”hello” + name +”,”+message);
}

这个函数可以通过其函数名来调用,后面还要加上一对圆括号和参数。调用sayHi()函数的代码;

sayHi(“tom”,”how are you,today”);
//函数输出结果为”hello tom,”how are you,today”.

函数定义中的命名参数name和message被用作字符串拼接的两个操作数,通过警告显示出来。
事实上,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值。

function sum(num1,num2){
return num1 + num2;
}

这个sum()函数的作用是把两个值加起来。除了return语句之外没有任何声明表示该函数要返回一个值。调用这个韩式的示例代码如下:

var return = sum(5,10);

函数会在执行完return语句后立刻退出,因此位于return 之后的所有代码都不会执行。
例如:

Function sum(sum1 +sum2){
return sum1 +sum2;
alert (“hello world”);//永远不会执行
}

理解参数

ECMAScript函数的参数与大多数其他语言的参数不同。他不在乎函数传进来多少个参数,也不在乎参数的数据类型。实际上,在函数体内,可以通过arguments对象来访问这个参数数组,从而获取传递给函数的一个参数。
例如前面的sayHi;

Function sayHi(name,message){
alert(”hello” + name +”,”+message);
}

function sayHi(){
    alert(”hello“ + arguments[0] + "," +arguments [1];
    }
    //arguments 对象与数组类似,可以使用方括号语法来访问它的每一个元素

通过arguments对象的length属性可以获知有多少个参数传递给了函数。

function ags(){
alert(argumens.lengh);
}
args("string",45); //2
args();   //0

2,函数的创建方法
函数的三种创建方法:
2.1函数的第一种定义方式:函数声明

//这种定义方式下,函数不适于任何对象,但是在js中它始终是默认的全局对象。
//fun();函数可以先调用,是因为在js'的顶层,都用一个预编译处理机制。
function fun(){
console.log(3);
//return this;
//默认会有一个return this!不过也可以修改返回其他值。
//全局对象 window!
}
fun();//函数必须调用,不调用函数没有效果。

2.2 函数的第二种定义方式:函数表达式(存储在变量中)

var fun = function()
{
    donssole.log(3);
}
fun();//函数的调用必须写在函数声明的后面,即先声明再调用;

2.3 函数的第三种定义方式:构造函数

//函数可以自调
var fun = new Function(console.log(3));

三、函数的调用方式
函数的创建方式有3种,调用方式也不是单一的,调用方式有4种!
1、作为一个函数去调用 函数名+();(函数作为全局对象调用,会使this的值成为全局对象,使用window对象作为一个变量,容易造成程序崩溃!)
2、函数作为方法调用:(函数作为对象的方法调用,会使this的值成为对象的本身!)

var myobject = {
firstname = “tom”,
lastname = “tome”,
fullname:function()
{
    return this.firstname + ""+this.lastname;
}
}
myobject.fullname();   //返回“tom tome”;

3、使用构造函数调用函数:(构造函数中的this没有任何值)

function myfunction(arg1,arg2){
this.firstname = arg1;
this.lastname = arg2;
}
var x = new myfunction("tom ,tome");
x.firstname;
//构造函数调用会创建一个新的对象,新的对象会继承构造函数的属性和方法

4、作为函数方法调用函数:(这种可以设置this的值,我可以返回不同this!)
在js中函数是对象,是对象就有属性个方法,而call()和apply()是预定义的函数方法!
这两个方法都可以调用函数,两个方法的第一个参数必须是对象的本身!

function mtfunction(a,b){
return a*b;
}
myfunction.call(myobject,10,2);  //返回20

function myfunction(a,b){
return a*b;
}
myArray = [10,2];
myfunction.apply(myobject,myArray);  //返回20
//两个方法的区别在于,apply传入的是一个参数数组,而call传入的是普通的参数。

四.js的运行机制问题:
1、在js中js引擎会优先解析var变量和function定义!在预解析完成后从上到下逐步进行!
2、解析var变量时,会把值存储在“执行环境”中,而不会去赋值,值是存储作用!例如:
alert(a); var a = 5; 这时会输出undifiend,意思是没有被初始化没有被赋值!
这并不是没有被定义,错误了的意思!
3、在解析function时会把函数整体定义,这也就解释了为什么在function定义函数时为什么可以先调用后声明了!其实表面上看是先调用了,其实在内部机制中第一步实行的是把以function方式定义的函数先声明了!

四、javascrit中函数有一个内置的对象arguments对象!
作用是:
1.在js中函数定义没有任何参数,调用该函数时可以传递任意参数!
2.arguments对象是数组对象。
3.arguments对象的length属性:获取函数的实参个数!
4.利用Arguments对象特性,实现模拟函数的重载的效果.

//我们可以很方便的找出数组中的最大值
x = findMax(1,123,500,115,44,88);
function findMax(){
var i,max=0;
for (i-0;9<arguments.length;i++)
{
if(arguments[i]>max)
{
  max=arguments[i];
}
}
return max;
}

//也可以很方便的计算数组中数值的和
x = sumAll(1,23,421,3214,22,44);

function sumAll(){
var i, sum=0;
for (i=0;i<arguments.lengh;i++){
sum+=arguments[i];
}
return sum;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值