@Secretmm
2016-10-18T14:28:25.000000Z
字数 3819
阅读 829
web前端
js/jquery
函数:本质上是一种代码的分组形式。通过这种形式赋予某组代码一个名字,便于重用时调用
注意点:
一个函数只能有一个返回值;
若是没有显示的返回值,默认返回值为undefined;
如果需要同时返回多个值,可以将其放进一个数组里,以数组的形式返回
function sum(a,b){
var c = a+b;
return c
}sum(3,2)
5typeof sum
"function"sum(1,'2')
"12"function sum(a,b){
var c = a*b;
return c
}sum(1,'2')
2sum(5,'2')
10sum(1)
NaNsum(5,'2',4,6,7)
10
它能够返回函数所接收的所有参数
1.
function sum(){
return arguments;
}sum(1,2,3,4,true,'mm');
[1, 2, 3, 4, true, "mm"]
2.
function sumBig(){
var num=0;
for(i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
sumBig(1,2,3,4,5,6,6)
27
可以有两个参数
不能识别小数点和指数e
parseInt()会试图将其收到的任何输入值(通常是字符串)转换为整数类型输出。如果失败就返回NaN。
eg:
parseInt('1,2,3')
1-------->遇到异常字符就放弃parseInt('872');
872parseInt('12mm');
12-------->遇到异常字符就放弃parseInt('mm12');
NaN-------->遇到异常字符就放弃parseInt(1.23);
1parseInt(123);
123
该函数有个可选的第二参数,radix,负责设定函数所期望的数字类型---八进制,十进制,十六进制,二进制。。
var a = 0377
a
255-------->0 开头,默认八进制var a =0x377
a
887-------->0x 开头,默认十六进制parseInt('0377');
377-------->0 开头,默认八进制parseInt('0x377');
887-------->0x 开头,默认十六进制parseInt('0377',10)
377-------->十进制parseInt('0377',8)
255-------->八进制parseInt('0377',16)
887-------->十六进制parseInt('FF',10)
NaN-------->十进制,FF为NaNparseInt('FF',16)
255-------->十六进制parseInt('132e3')
132-------->不能识别指数
只有一个参数;
可识别指数;
不能识别字符串形式的其他进制;
eg:
parseFloat('123')
123parseFloat('1.23')
1.23parseFloat('1.23rrr.00')
1.23-------->遇到异常字符就放弃parseFloat('rrr1.23')
NaN-------->遇到异常字符就放弃parseFloat('1.23000')
1.23parseFloat('12.0a')
12-------->遇到异常字符就放弃parseFloat(0377)
255parseFloat('0377')
377-------->字符串--遇到异常字符就放弃【parseInt课识别】parseFloat('0x377');
0-------->字符串--遇到异常字符就放弃【parseInt课识别】parseFloat(0x377);
887132e-2
1.32parseFloat('132e-2')
1.32132e2
13200parseFloat(132e2)
13200
isNaN:的确不是一个可以参与算数运算的数字
可以识别字符串形式的指数,'0x333' '0377'
eg:
isNaN(3e3)
falseisNaN('3e3')
falseisNaN('1.23')
falseisNaN('0xff')
falseisNaN(NaN)
trueisNaN('NaN')
true
isFinite():的确非infinity也非NaN
可以识别字符串形式的指数,'0x333' '0377'
eg:
isFinite(Infinity)
falseisFinite('Infinity')
falseisFinite(NaN)
falseisFinite('2e+3')
trueisFinite(12)
trueisFinite('12')
trueisFinite('0xff')
trueisFinite('0377')
true
eval():会将其输入字符串当做JavaScript代码来执行;慎用,少用,不用,忘了它
eg:
eval('var a = 2;')
a
2
https://www.zybuluo.com/Secretmm/note/448865#变量作用域
function f(){return 1}
typeof f
"function"typeof f()
"number"var s=function(){return 1}
typeof s
"function"typeof s()
"number"
所以这两种函数定义在本质上是相同的:
function f(){return 1}
var f=function(){return 1}
如何像变量一样使用函数
var sum = function(a,b){return a+b;}
var s = sum
delete sum
falses(3,4)
7
没有名字的函数;
eg:
function (a){
return a;
}
作用:
可以将匿名函数作为参数传递给其他函数;
可以定义某个匿名函数来执行某些一次性任务;
函数被当做参数传递给其它函数
定义:当我们将函数A传递给函数B,并由B来执行A时,A就成了一个回调函数。如果这时A还是一个匿名函数,我们就称它为匿名回调函数
eg:
function add(a,b){
return a+b
}function one(c){return c;}
function two(c){return c;}
add(one(3),two(4))
7
回调函数的优点:
可以在不做命名的情况下传递函数(可以节省全局变量)
可以将一个函数调用操作委托给另一个函数(节省代码量)
有助于提升性能
one step:
function addOne(a){
return a+1;
}
function multiply(a,b,c){
var x=[];
for(var i=0;i<arguments.length;i++){
x[i]=arguments[i]*2;
}
return x;
}
var arr=[];
arr= multiply(3,4,5);
arr
[6, 8, 10]
for(var i=0;i<arr.length;i++){
arr[i]=addOne(arr[i]);
}
arr
[7, 9, 11]
可以简化为:
function multiply(a,b,c,callback){
var x=[];
for(var i=0;i<3;i++){
x[i]=callback(arguments[i]*2);
}
return x;
}
function addOne(a){
return a+1;
}
var arr=[];
arr=multiply(5,6,7,addOne)
[11, 13, 15]
或者 匿名函数代替addOne();
arr=multiply(5,6,7,function(a){return a+1;})
匿名函数的另一个示例:这种函数可以在定义后自行调用
两对小括号,第一对小括号里面放一个匿名函数
(
function(){
alert("mm");
}
)()
第二对小括号起到“立即调用”的作用,同时也是向匿名函数传递参数的地方
(
function(name){
console.log("hello"+name);
}
)('zmm')
hellozmm
优点:
不会产生任何的全局变量;
无法重复执行(除非放入循环或其他函数中)
适合执行一次性的或初始化任务;
函数内部定义另一个函数
function sum(a,b){
function min(c){
return c-1;
};
return a+min(b);
};
sum(3,6);
8
或者
var sum =function(a,b){
var min = function(c){
return c-1;
}
return a+min(b);
}
sum (3,6);
8
当调用函数sum()时,本地函数min()也会在其内部被调用。由于min()是本地函数,它在sum()以外的地方是不可见的,所以也称min()为私有函数;
优点:
有助于确保全局名字空间的纯净性(命名冲突的机会减小);
私有性,不让别人知道;
函数始终都会有一个返回值,即便不是显示返回,它也会隐式返回一个undefined;这个返回值也可以是一个函数