[关闭]
@Secretmm 2016-10-18T14:28:25.000000Z 字数 3819 阅读 829

js面向对象编程指南

web前端 js/jquery


函数篇【只讲注意点,具体内容看该书】

函数:本质上是一种代码的分组形式。通过这种形式赋予某组代码一个名字,便于重用时调用

注意点:

一个函数只能有一个返回值;

若是没有显示的返回值,默认返回值为undefined;

如果需要同时返回多个值,可以将其放进一个数组里,以数组的形式返回

函数参数

function sum(a,b){
var c = a+b;
return c
}

sum(3,2)
5

typeof sum
"function"

sum(1,'2')
"12"

function sum(a,b){
var c = a*b;
return c
}

sum(1,'2')
2

sum(5,'2')
10

sum(1)
NaN

sum(5,'2',4,6,7)
10

arguments

它能够返回函数所接收的所有参数
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

预定义函数

parseInt()

可以有两个参数
不能识别小数点和指数e

parseInt()会试图将其收到的任何输入值(通常是字符串)转换为整数类型输出。如果失败就返回NaN
eg:

parseInt('1,2,3')
1-------->遇到异常字符就放弃

parseInt('872');
872

parseInt('12mm');
12-------->遇到异常字符就放弃

parseInt('mm12');
NaN-------->遇到异常字符就放弃

parseInt(1.23);
1

parseInt(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为NaN

parseInt('FF',16)
255-------->十六进制

parseInt('132e3')
132-------->不能识别指数


parseFloat()

只有一个参数;
可识别指数;
不能识别字符串形式的其他进制;
eg:
parseFloat('123')
123

parseFloat('1.23')
1.23

parseFloat('1.23rrr.00')
1.23-------->遇到异常字符就放弃

parseFloat('rrr1.23')
NaN-------->遇到异常字符就放弃

parseFloat('1.23000')
1.23

parseFloat('12.0a')
12-------->遇到异常字符就放弃

parseFloat(0377)
255

parseFloat('0377')
377-------->字符串--遇到异常字符就放弃【parseInt课识别】

parseFloat('0x377');
0-------->字符串--遇到异常字符就放弃【parseInt课识别】

parseFloat(0x377);
887

132e-2
1.32

parseFloat('132e-2')
1.32

132e2
13200

parseFloat(132e2)
13200


isNaN

isNaN:的确不是一个可以参与算数运算的数字
可以识别字符串形式的指数,'0x333' '0377'

eg:

isNaN(3e3)
false

isNaN('3e3')
false

isNaN('1.23')
false

isNaN('0xff')
false

isNaN(NaN)
true

isNaN('NaN')
true


isFinite()

isFinite():的确非infinity也非NaN
可以识别字符串形式的指数,'0x333' '0377'

eg:

isFinite(Infinity)
false

isFinite('Infinity')
false

isFinite(NaN)
false

isFinite('2e+3')
true

isFinite(12)
true

isFinite('12')
true

isFinite('0xff')
true

isFinite('0377')
true


url的编码与反编码


eval()

eval():会将其输入字符串当做JavaScript代码来执行;慎用,少用,不用,忘了它

eg:

eval('var a = 2;')
a
2


alert()


变量的作用域

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
false

s(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;这个返回值也可以是一个函数


能重写自己的函数


闭包

作用域链





添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注