预定义函数:
parseInt()
注意:0x开头的,默认为十六进制,0开头的,默认为八进制;
parseFloat()
注意:与parseInt一样,遇到第一个异常字符也会放弃,但它可以接受指数形式的数据;
例如:parseInt('1e1') = 1;parseFloat('1e1') = 10;
isNaN() 检查是否是非数字值,可以用来检测parseInt()或parseFloat()是否调用成功
isFinite() 检查是否有限
encodeURI() 返回一个可用的URL,可以传入整个URL
encodeURIComponent()可以传入部分URL,它会将字符串全部进行编码
变量的作用域:
全局变量:是声明在所有函数之外的变量
局部变量:某个函数中声明的变量
注意:函数域始终优先于全局域,例如:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
第一个alert会弹出undefined不是123,第二个alert会弹出1
函数也是数据类型
匿名函数的用法:
1.作为参数传递给其他函数
作用:
- 节省全局变量
- 将一个函数委托给另一个函数
- 有助于提高性能
2.执行某些一次性任务(自调函数)
作用:不会产生任何全局变量
闭包
1.JS不存在大括号级的作用域,只存在函数级的作用域
2.利用闭包突破作用域链:如果一个函数需要在其父级函数返回之后留住对父级作用域的链接的话,就必须要为其建立闭包。
下面是闭包的常见代码:
function f () {
var b = 'b';
return function () {
return b;
}
}
// 直接建立全局方法,以方便外部引用
var n;
function f () {
var b = 'b';
n = function () {
return b;
}
}
function f(arg) {
var n = function () {
return arg;
};
arg++;
return n;
}
闭包的应用示例:
1.Getter与Setter
var getValue, setValue;
(function () {
var secret = 0;
getValue = function () {
return;
}
setValue = function (v) {
secret = v;
}
})();
2.迭代器
function setup (x) {
var i = 0;
return function () {
return x[i++];
}
}
var next = setup(['a', 'b', 'c']);
next();