JavaScript函数(内建函数),变量详解
目录
1 |
声明函数 |
7.4 |
内部(私有)函数 |
2 |
调用函数 |
7.5 |
返回函数的函数 |
3 |
形参,实参 |
7.6 |
函数的重写 |
4 |
内建变量 |
8 |
JavaScript变量详解 |
5 |
内建函数 |
8.1 |
作用域链 |
6 |
变量的作用域 |
9 |
(function(){…}());结构 |
函数的含义与多种用法 |
10 |
setter 和getter |
|
7.1 |
函数也是数据,可以把一个函数赋给一个变量 |
11 |
JavaScript迭代器的写法 |
7.2 |
回调函数 |
||
7.3 |
即时函数 |
1、声明函数
关键词, function
函数名 sum
参数 a,b
function sum(a,b){
var c = a +b;
return c;
}
2、调用函数
>var result = sum(1,2);
>result;
3
若函数所需的调用参数在调用的时候忘了传递相关的参数值,
JavaScript会自动设定为undefined,最后会返回NaN
例如:>sum(1);
NaN
3、形参、实参
形参:声明函数时所用的那些参数
实参:调用函数时所传递的那些参数
4、内建变量
arguments变量:返回函数所接受的所有参数
例子:
>function arg(){
return arguments;
}
>arg(1,2,3,4,5);
[1,2,3,4,5]
5、内建函数
【目录:
parseInt(),
parseFloat() ,
isNaN(),
isFinite(),
encodeURI(),
decodeURI(),
encodeURIComponent(),
decodeURIComponent(),
eval(),
alert()
】
(1)parseInt() 将收到的任何输入值转换成整型类型输出
可选的第二参数:radix,
parseInt('',radix)
【radix 用处,设定函数所期望的数字类型:十进制、十六进制,二进制】
不选第二参数radix时
>parseInt('377');
377
>parseInt('0377'); //首参数以0开头时,默认为八进制
255
>parseInt('0x377'); //首参数以0x开头时,默认为十六进制
887
(2)parseFloat()
跟parseInt功能差不多,区别:仅支持十进制,参数还可以接受指数形式的数据
例子:>parseFloat('123e-2');
1.23
(3)isNaN()
用处:确定某个输入值是否为可以参与算数运算的数字,返回的是布尔值boolean
例如:>isNaN(parseInt('abc123'));
true
说明abc123是不可以参与算数运算的数字
因为 >isNaN(NaN);
true
(4)isFinite();
用处:用来检查输入值是否是一个既非Infinity也非NaN的数字
例如:>isFinite(Infinity);
false
>isFinite(12);
true
(5)encodeURI();
用处:转义URL ,返回一个可用的URL
(6)encodeURIComponent();
用处:转义URL ,返回的是URL的一部分
(7)decodeURI();
用处:对应encodeURI()的反编码
(8)decodeURIComponent();
用处:对应encodeURIComponent()的反编码
(9)eval()
用处:将其输入的字符串当做JavaScript代码来执行
例子:>eval('var ll = 2;');
>ll;
2
(10)alert()
作用:显示一个带文本的消息对话框
6、变量的作用域(JavaScript)
JavaScript中变量的定义不是以代码块作为作用域的,而是以函数作为作用域。
如果声明变量时没有使用var语句,那么它就会被默认为全局变量。
例子:
>function f(){local =2}
>local;
ReferenceError: local is not defined
>f();
undefined
>local;
2
7、函数的含义与多种用法
7.1、函数也是数据,可以把一个函数赋给一个变量
var f = function(a){ //function(a) 为匿名函数
return a;
}
这种定义方式叫做函数标识记法
举例:
>var yzy = function(){ return 1 }
>typeof yzy
function //证明函数也是数据
函数(特殊的数据的性质):
1、包含的是代码
2、是可执行的
7.2、回调函数
例子:>function invokeAdd(a,b){ //声明函数invokeAdd()
return a()+b();
}
>function one(){ //声明函数one
return 1;
}
>function two(){ //声明函数two
return 2;
}
>invokeAdd(one,two); //one与two就是invokeAddd的回调函数
3
>invokeAdd(function(){return 1; } , function(){return 2;}); //匿名回调函数
3
7.3、即时函数
含义:函数定义后立即调用
例子:function(){
alert('哈哈!!!');
}
7.4、内部(私有)函数
用函数标识记法写个例子
例如: var outer = function (param){
var inner = function(theinput){
return theinput*2;
};
return inner(param;)
}
注意:若返回的函数不带括号,结果只是一个函数引用,不会产生函数的调用
7.5、返回函数的函数
例子:function a(){
alert('AAA');
return function(){ //返回匿名函数
alter('BBB');
}
}
7.6、函数的重写
例子:
>function a(){
alert("A!!!");
a = function(){ | 重写函数a
alert("B!!!"); |
} |
}
8、JavaScript变量详解
1、全局变量:定义在所有函数之外的变量
2、局部变量:定义在函数之内的变量
注意:若声明变量的时候,没有使用var,该变量会被默认为全局变量
问题:怎样将函数中的局部变量变为全局变量
首先,在一个函数中定义一个不用var声明的变量,
其次, 调用该函数,创建该变量并赋值,
最后,该变量变为全局变量
例子:>function f(){ local = 1;}
>f();
undefind
>local;
1
8.1、作用域链
含义:处于作用域链中的变量除了可以访问自己本身的作用域与全局变量,也可以访问父级的作用域
例子:
>var yzy_local = 1;
>function outer(){ //父级
var outer_local = 2;
function inner(){ //子级 (子级可以访问父级的作用域,形成作用域链)
var inner_local = 3;
return yzy_local + outer_local+inner_local;
}
}
>outer();
6
注意:若返回的函数不带括号,结果只是一个函数引用,不会产生函数的调用
9、(function(){…}());结构
作用:立即调用的函数表达式
10、getter 与 setter
【作用】:赋值之前给变量一定的保护
【要求】:将这两个函数放在同一函数中,目的:享受同一作用域
例子:
var getValue,setValue;
(function(){
var secret = 0;
getValue = function(){
return secret;
}
setValue = function(v){
if(typeof v === "number"){ //判断是否number类型的值
secret = v;
}
}
}() );
11、JavaScript迭代器的写法
实例:
(1)首先
function setup(x){
var i= 0;
return function(){
return x[i++];
};
}
(2)之后用一组数组来调用setup()函数,就可以创建出我们要用的next()函数。
var next = setup(['a','b','c']);
(3)迭代器函数
>next();
"a"
>next();
"b"
>next();
"c"