//1.参数的省略
//正确写法:
function f2(a) {
//上面代码的||表示“或运算”,即如果a有值,则返回a,否则返回事先设定的默认值(上 例为1);这种写法会对a进行一次布尔运算,只有为true时,才会返回a。可是,除了undefined以外,0、空字符、null等的布尔值也是false。也就是说,在上面的函数中,不能让a等于0或空字符串,否则在明明有参数的情况下,也会返回默认值。
a = a || 1;
return a;
}
f(''); //1
f(); //1
//精确写法:
//变量p是一个原始类型的值,传入函数f的方式是传值传递。因此,在函数内部,p的值是原始值的拷贝,无论怎么修改,都不会影响到原始值。
var p = 2;
function f(p) {
p = 3;
}
f(p); //这里p的值是2
//函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
var obj = { p: 1 };
function f(o) {
o.p = 2;
}
f(obj); //这里obj.p等于2
// 要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组(2种方法)
var args = Array.prototype.slice.call(arguments);
// or
//5.闭包
//链式作用域(http://javascript.ruanyifeng.com/grammar/function.html)
//既然f2可以读取f1的局部变量,那么只要把f2作为返回值,我们可以在f1外部读取它的内部变量
function f(a, b) {
return a;
}
f(1, 2); //1
f(1); //1
f(); //undefined
//2.默认值
//正确写法:
function f2(a) {
//上面代码的||表示“或运算”,即如果a有值,则返回a,否则返回事先设定的默认值(上 例为1);这种写法会对a进行一次布尔运算,只有为true时,才会返回a。可是,除了undefined以外,0、空字符、null等的布尔值也是false。也就是说,在上面的函数中,不能让a等于0或空字符串,否则在明明有参数的情况下,也会返回默认值。
a = a || 1;
return a;
}
f(''); //1
f(); //1
//精确写法:
function f(a) {
(a !== undefined && a !== null) ? a = a : a = 1;
return a;
}
f() // 1
f('') // ""
f(0) // 0
//3.传递方式
//变量p是一个原始类型的值,传入函数f的方式是传值传递。因此,在函数内部,p的值是原始值的拷贝,无论怎么修改,都不会影响到原始值。
var p = 2;
function f(p) {
p = 3;
}
f(p); //这里p的值是2
//函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
var obj = { p: 1 };
function f(o) {
o.p = 2;
}
f(obj); //这里obj.p等于2
//4.arguments
function f() {
return arguments.length;
}
f(1, 2, 3)//3
f(1); //1
f(); //0
// 要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组(2种方法)
var args = Array.prototype.slice.call(arguments);
// or
var args = [];
for (var i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
//5.闭包
//链式作用域(http://javascript.ruanyifeng.com/grammar/function.html)
//既然f2可以读取f1的局部变量,那么只要把f2作为返回值,我们可以在f1外部读取它的内部变量
function f2() {
var n = 999;
function fn() {
console.log(n);
}
return fn;
}
var result = f2();
result();//999
=========================
setInterval(function(){},2000);自动回调dequene方法
var $html = document.getElementById("d2");
function cb1()
{ console.log(1); }
function cb2()
{ console.log(2); }
var p = $('p')[0];
$.queue(p, 'mx', cb1);
$.queue(p, 'mx', cb2);
每2秒调用一次$.dequeue,依次输出1,2
setInterval(function () {
$.dequeue(p, 'mx');
}, 2000);