什么是函数?
函数是完成某一功能的代码段,并且可重复执行和方便管理维护的代码段。
自定义函数
1、通过function关键字,如:
需要注意的问题是:函数名称不要包含特殊字符、最好含义明确、最好遵循驼峰标记法或者下划线、严格区分大小写;函数名称如果重复会产生覆盖;函数可以有参数也可以没有参数,可以有一个参数也可以有多个参数;函数通过return加返回值,如果没有return默认返回undefined;函数不调用不执行。
2、匿名函数:函数表达式可以存储在变量中,变量也可以作为一个函数使用;可以将匿名函数作为参数传递给其他函数,接收方函数就可以通过所传递进来的函数完成某些功能;可以通过匿名函数来执行某些一次性的任务。
3、通过function()构造函数,如:
如何调用函数?
1、作为一个函数调用:通过函数名称()进行调用,如果有参数传递相应参数即可;在HTML中默认的全局对象是HTML页面本身,所以函数是属于HTML页面。在浏览器中的页面对象是浏览器窗口(window)对象。所以函数会自动变为window对象的函数,也可以通过window.函数名称()进行调用,如:
2、全局对象:当函数没有被自身的对象调用时,this的值就会变成就会全局对象,在web浏览器中全局对象是浏览器窗口window对;函数作为全局对象调用,会使this的值称为全局对象,使用window对象作为一个变量容易造成程序崩溃。
3、函数作为方法调用:可以将函数定义为对象的方法进行调用。
4、使用构造函数调用函数:如果在函数调用前使用了new关键字,则调用了构造函数。
5、作为回调函数调用函数:call()方法和apply()方法。
函数中的参数
1、函数可以有参数也可以没有参数,如果定义了参数,在调用函数的时候没有传值,默认值设置为undefined:
2、在调用函数时如果传递参数超过了定义时参数,js会忽略掉多余参数:
3、js中不能直接写默认值,可以通过arguments对象来实现默认值效果:
4、可以通过arguments对象实现可变参数的函数:
5、通过值传递参数在函数体内对变量做修改不会影响变量本身:
6、通过对象传递参数在函数体内对变量做更改会影响变量本身:
变量的作用域
1、局部变量:在函数体内声明的变量,只能在函数体内使用。
注意:在函数内不用var定义的变量是全局变量
2、全局变量:函数体外声明的变量,在变量声明开始到脚本结束都可以使用。
注意:尽量控制全局变量的数量,容易引发bug;最好总是使用var语句来声明变量。
JavaScript中的全局函数
1、parseInt(string,radix):返回转换成整数的值。当参数radix的值为0,或者没有设置这个参数,parseInt()会根据string来判断数字的基数,规则为:
如果string以0x开头,parseInt()会把string的其余部分解析为十六进制的整数;
如果string以0开头,那么ECMAScript v3允许parseInt()的一个实现把其后的字符解析为八进制或十六进制的数字;
如果string以1~9的数字开头,parseInt()将把它解析为十进制的整数;
如果字符串以合法字符开始,截取合法字符;
如果字符串的第一个字符不能被转换为数字,parseInt()会返回NaN;
在字符串以"0"为开始时旧的浏览器默认使用八进制基数。ECMAScript 5,默认的是十进制的基数;
在字符串中开头和结尾的空格是允许的。
2、parseFloat(string):返回转换成浮点型的值。该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。
3、isFinite(value):检测某个是是否是无穷值。如果number是NaN或者+Infinity或者-Infinity的数,isFinite()返回false。
4、isNaN(value):检测某个值是否是NaN。isNaN()检测是否是非数字值,如果值为NaN返回true,否则返回false。
5、encodeURI(uri):将字符串编码为URI。使用 decodeURI() 方法可以编码URI(通用资源标识符:UniformResourceIdentifier,简称"URI");对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的: , / ? : @ & = + $ # (可以使用 encodeURIComponent() 方法分别对特殊含义的 ASCII 标点符号进行编码。).
6、decodeURI(uri):解码某个个编码的URI。
7、encodeURIComponent(uri):将字符串编码为URI组件。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) ;其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
8、decodeURIComponent():解码一个编码的URI组件。
9、escape():对字符串进行编码。该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换; escape()函数不能用于编码 URIs(通用资源标识符(UniformResourceIdentifier,简称"URI"))。
10、unescape():解码由escape()编码的字符串。
11、eval():将JavaScript字符串当作脚本来执行。如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句;eval()函数是一种由函数执行的动态代码,比直接执行脚本慢很多;慎重使用eval()函数,尽量不用,保证程序的安全性。
12、Number(object):把对象的值转换为数字。如果对象的值无法转换为数字,Number()函数返回NaN;如果参数的Date对象,Number()返回从1970年1月1日到现在所经历的毫秒数
13、String():把对象的值转换为字符串。String() 函数返回与字符串对象的toString()方法值一样
特殊形式的函数
函数也是数据:JavaScript中的函数也是一种数据类型,只不过这种特殊类型有两个重要的特性;他们所包含的是代码,他们是可以执行的。
自调用函数