标签:
javascript的函数比较丰富、和javascript的对象一样,需要一定的积累才可以深入理解,通过函数可以体现javascript的面向过程编程思想,通过对象类型可以更好的体现面向对象的设计思想,本节主要大概讲述一下javascript的函数
javascript的函数定义分为三种:function语句形式、函数直接量形式、构造函数的形式
// function 语句定义函数 function+函数名+参数列表+函数体 function fun1(x,y){ return x+y; } //执行一个函数是 fun1(3,4) 其中3,4是两个实际参数 console.info(fun1(3,4)) //在javascript的函数比较灵活,只会根据函数名进行匹配,和实际参数个数无关,同样返回7 console.info(fun1(3,4,5,6)) //函数直接量 这种方式用的较多 定义一个变量,直接赋值一个函数 var func2=function(x,y,z){ return x+y+z } //执行一个函数 console.info(func2('a','b',4)) //第三种形式 构造函数的形式 如果有返回值,必须放在最后一个参数,而且最好加上分号,对于形式参数需要使用引号 //构造函数没有函数体,是顶级作用域,与前两种方式不同 var func3=new Function('x','y','return x+y') //执行函数 console.info(func3(3,5))
主要两个作用,1、获取实际参数、2、可以递归调用自己
//对于通过function定义函数、函数直接量定义的函数,都有一个特定的隐藏对象arguiments //需要注意的是通过顶级作用域的构造函数Function 定义的函数是没有arguments对象 //1 arguments作用一,接受函数的实际参数,可以获取实际参数的长度,具体的实际参数 //对于arguments的使用需要在函数体中 var fun4=function(){ Ext.Msg.alert('实际参数长度',arguments.length) Ext.Msg.alert('第一个参数值',arguments[0]) return 1; } console.info(fun4(1,2,3,4)) }) //2 arguments作用二,用于函数的递归操作 // 求一个数的阶乘 function fun5(x){ if(x==1){ return 1; }else{ // 一般可以这样写,但是不够严谨 return x*fun5(x-1) //最标准的写法 return x*arguments.callee(x-1) } }
主要需要理解的概念执行环境、作用域链、js垃圾回收
主要的作用是避免使用全局变量
//函数碰到return直接返回、没有renturn 返回结果undefined //在javascript语言里: 更不提倡使用全局变量 (1:不安全、2:做变量搜索查找的时候效率比较低) //通过闭包可以保留具备变量的值 //避免使用全局变量 点击按钮 统计点击的次数 var inp=function(){ var i=0; return { getCount:function(){ alert(++i); } } }()
<input type="button" onclick="inp.getCount()" value="按钮"/>
//函数定义的区别 // 通过function语句定义的,会在执行javascript代码前优先加载 function定义的函数 // 通过函数直接量、构造函数定义的则会从上到下依次执行 // 1 演示在代码中先执行函数,后定义函数 //执行函数代码 //这段代码不会报错,因为function定义的函数优先加载 console.info(fun6(4,5)); function fun6(x,y){ return x*y } // 使用函数直接量,则报错undefined /* console.info(fun7(4,5)); var fun7=function (x,y){ return x*y }*/ //使用构造函数,同样报错undefined /* console.info(fun8(6,7)); var fun8=new Function('x','y','return x+y;')*/ //作用域区别 // 通过构造函数创建,具有顶级作用域,只能取window对象定义的变量,全局变量 var b=1 function test(){ var b=2 // 这种方式优选局部变量,然后才是全局变量 var f=function(){return b}; alert(f()) // 只能与全局变量 var s=new Function("return b;") alert(s()) } console.info(test())
call apply 主要作用是绑定作用域
this 关键字,在javascript中,总是指向调用者,谁调用函数,this就指向谁
apply第一个参数是对象,第二个参数是数组表示实际参数
call 第一个参数是对象,后面是实际参数
// call apply 主要作用是绑定作用域 // this 关键字,在javascript中,总是指向调用者,谁调用函数,this就指向谁 //这个变量是属于window的,全局变量 var color='red' // 定义一个obj,对象,有一个color属性 var obj={'color':'blue'} var fun12=function(x,y,z){ //指向调用者的color属性 alert(this.color) return x+y+z } // window 调用,返回red fun12(); //obj对象调用,返回blue //call 第一个参数是对象,后面是实际参数 console.info(fun12.call(obj,1,2,3)) // apply第一个参数是对象,第二个参数是数组表示实际参数 console.info(fun12.apply(obj,[1,2,4]))
标签:
原文地址:http://blog.csdn.net/h249059945/article/details/47267711